//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

import Foundation
import SotoCore

extension Chime {
    // MARK: Enums

    public enum AccountType: String, CustomStringConvertible, Codable {
        case enterprisedirectory = "EnterpriseDirectory"
        case enterpriselwa = "EnterpriseLWA"
        case enterpriseoidc = "EnterpriseOIDC"
        case team = "Team"
        public var description: String { return self.rawValue }
    }

    public enum AppInstanceDataType: String, CustomStringConvertible, Codable {
        case channel = "Channel"
        case channelmessage = "ChannelMessage"
        public var description: String { return self.rawValue }
    }

    public enum BotType: String, CustomStringConvertible, Codable {
        case chatbot = "ChatBot"
        public var description: String { return self.rawValue }
    }

    public enum CallingNameStatus: String, CustomStringConvertible, Codable {
        case unassigned = "Unassigned"
        case updatefailed = "UpdateFailed"
        case updateinprogress = "UpdateInProgress"
        case updatesucceeded = "UpdateSucceeded"
        public var description: String { return self.rawValue }
    }

    public enum Capability: String, CustomStringConvertible, Codable {
        case sms = "SMS"
        case voice = "Voice"
        public var description: String { return self.rawValue }
    }

    public enum ChannelMembershipType: String, CustomStringConvertible, Codable {
        case `default` = "DEFAULT"
        case hidden = "HIDDEN"
        public var description: String { return self.rawValue }
    }

    public enum ChannelMessagePersistenceType: String, CustomStringConvertible, Codable {
        case nonPersistent = "NON_PERSISTENT"
        case persistent = "PERSISTENT"
        public var description: String { return self.rawValue }
    }

    public enum ChannelMessageType: String, CustomStringConvertible, Codable {
        case control = "CONTROL"
        case standard = "STANDARD"
        public var description: String { return self.rawValue }
    }

    public enum ChannelMode: String, CustomStringConvertible, Codable {
        case restricted = "RESTRICTED"
        case unrestricted = "UNRESTRICTED"
        public var description: String { return self.rawValue }
    }

    public enum ChannelPrivacy: String, CustomStringConvertible, Codable {
        case `private` = "PRIVATE"
        case `public` = "PUBLIC"
        public var description: String { return self.rawValue }
    }

    public enum EmailStatus: String, CustomStringConvertible, Codable {
        case failed = "Failed"
        case notsent = "NotSent"
        case sent = "Sent"
        public var description: String { return self.rawValue }
    }

    public enum ErrorCode: String, CustomStringConvertible, Codable {
        case accessdenied = "AccessDenied"
        case badrequest = "BadRequest"
        case conflict = "Conflict"
        case forbidden = "Forbidden"
        case notfound = "NotFound"
        case phonenumberassociationsexist = "PhoneNumberAssociationsExist"
        case preconditionfailed = "PreconditionFailed"
        case resourcelimitexceeded = "ResourceLimitExceeded"
        case servicefailure = "ServiceFailure"
        case serviceunavailable = "ServiceUnavailable"
        case throttled = "Throttled"
        case throttling = "Throttling"
        case unauthorized = "Unauthorized"
        case unprocessable = "Unprocessable"
        case voiceconnectorgroupassociationsexist = "VoiceConnectorGroupAssociationsExist"
        public var description: String { return self.rawValue }
    }

    public enum GeoMatchLevel: String, CustomStringConvertible, Codable {
        case areacode = "AreaCode"
        case country = "Country"
        public var description: String { return self.rawValue }
    }

    public enum InviteStatus: String, CustomStringConvertible, Codable {
        case accepted = "Accepted"
        case failed = "Failed"
        case pending = "Pending"
        public var description: String { return self.rawValue }
    }

    public enum License: String, CustomStringConvertible, Codable {
        case basic = "Basic"
        case plus = "Plus"
        case pro = "Pro"
        case protrial = "ProTrial"
        public var description: String { return self.rawValue }
    }

    public enum MemberType: String, CustomStringConvertible, Codable {
        case bot = "Bot"
        case user = "User"
        case webhook = "Webhook"
        public var description: String { return self.rawValue }
    }

    public enum NotificationTarget: String, CustomStringConvertible, Codable {
        case eventbridge = "EventBridge"
        case sns = "SNS"
        case sqs = "SQS"
        public var description: String { return self.rawValue }
    }

    public enum NumberSelectionBehavior: String, CustomStringConvertible, Codable {
        case avoidsticky = "AvoidSticky"
        case prefersticky = "PreferSticky"
        public var description: String { return self.rawValue }
    }

    public enum OrderedPhoneNumberStatus: String, CustomStringConvertible, Codable {
        case acquired = "Acquired"
        case failed = "Failed"
        case processing = "Processing"
        public var description: String { return self.rawValue }
    }

    public enum OriginationRouteProtocol: String, CustomStringConvertible, Codable {
        case tcp = "TCP"
        case udp = "UDP"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberAssociationName: String, CustomStringConvertible, Codable {
        case accountid = "AccountId"
        case sipruleid = "SipRuleId"
        case userid = "UserId"
        case voiceconnectorgroupid = "VoiceConnectorGroupId"
        case voiceconnectorid = "VoiceConnectorId"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberOrderStatus: String, CustomStringConvertible, Codable {
        case failed = "Failed"
        case partial = "Partial"
        case processing = "Processing"
        case successful = "Successful"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberProductType: String, CustomStringConvertible, Codable {
        case businesscalling = "BusinessCalling"
        case voiceconnector = "VoiceConnector"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberStatus: String, CustomStringConvertible, Codable {
        case acquirefailed = "AcquireFailed"
        case acquireinprogress = "AcquireInProgress"
        case assigned = "Assigned"
        case deletefailed = "DeleteFailed"
        case deleteinprogress = "DeleteInProgress"
        case releasefailed = "ReleaseFailed"
        case releaseinprogress = "ReleaseInProgress"
        case unassigned = "Unassigned"
        public var description: String { return self.rawValue }
    }

    public enum PhoneNumberType: String, CustomStringConvertible, Codable {
        case local = "Local"
        case tollfree = "TollFree"
        public var description: String { return self.rawValue }
    }

    public enum ProxySessionStatus: String, CustomStringConvertible, Codable {
        case closed = "Closed"
        case inprogress = "InProgress"
        case open = "Open"
        public var description: String { return self.rawValue }
    }

    public enum RegistrationStatus: String, CustomStringConvertible, Codable {
        case registered = "Registered"
        case suspended = "Suspended"
        case unregistered = "Unregistered"
        public var description: String { return self.rawValue }
    }

    public enum RoomMembershipRole: String, CustomStringConvertible, Codable {
        case administrator = "Administrator"
        case member = "Member"
        public var description: String { return self.rawValue }
    }

    public enum SipRuleTriggerType: String, CustomStringConvertible, Codable {
        case requesturihostname = "RequestUriHostname"
        case tophonenumber = "ToPhoneNumber"
        public var description: String { return self.rawValue }
    }

    public enum SortOrder: String, CustomStringConvertible, Codable {
        case ascending = "ASCENDING"
        case descending = "DESCENDING"
        public var description: String { return self.rawValue }
    }

    public enum UserType: String, CustomStringConvertible, Codable {
        case privateuser = "PrivateUser"
        case shareddevice = "SharedDevice"
        public var description: String { return self.rawValue }
    }

    public enum VoiceConnectorAwsRegion: String, CustomStringConvertible, Codable {
        case usEast1 = "us-east-1"
        case usWest2 = "us-west-2"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct Account: AWSDecodableShape {
        /// The Amazon Chime account ID.
        public let accountId: String
        /// The Amazon Chime account type. For more information about different account types, see Managing Your Amazon Chime Accounts in the Amazon Chime Administration Guide.
        public let accountType: AccountType?
        /// The AWS account ID.
        public let awsAccountId: String
        /// The Amazon Chime account creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The default license for the Amazon Chime account.
        public let defaultLicense: License?
        /// The Amazon Chime account name.
        public let name: String
        /// The sign-in delegate groups associated with the account.
        public let signinDelegateGroups: [SigninDelegateGroup]?
        /// Supported licenses for the Amazon Chime account.
        public let supportedLicenses: [License]?

        public init(accountId: String, accountType: AccountType? = nil, awsAccountId: String, createdTimestamp: Date? = nil, defaultLicense: License? = nil, name: String, signinDelegateGroups: [SigninDelegateGroup]? = nil, supportedLicenses: [License]? = nil) {
            self.accountId = accountId
            self.accountType = accountType
            self.awsAccountId = awsAccountId
            self.createdTimestamp = createdTimestamp
            self.defaultLicense = defaultLicense
            self.name = name
            self.signinDelegateGroups = signinDelegateGroups
            self.supportedLicenses = supportedLicenses
        }

        private enum CodingKeys: String, CodingKey {
            case accountId = "AccountId"
            case accountType = "AccountType"
            case awsAccountId = "AwsAccountId"
            case createdTimestamp = "CreatedTimestamp"
            case defaultLicense = "DefaultLicense"
            case name = "Name"
            case signinDelegateGroups = "SigninDelegateGroups"
            case supportedLicenses = "SupportedLicenses"
        }
    }

    public struct AccountSettings: AWSEncodableShape & AWSDecodableShape {
        /// Setting that stops or starts remote control of shared screens during meetings.
        public let disableRemoteControl: Bool?
        /// Setting that allows meeting participants to choose the Call me at a phone number option. For more information, see Join a Meeting without the Amazon Chime App.
        public let enableDialOut: Bool?

        public init(disableRemoteControl: Bool? = nil, enableDialOut: Bool? = nil) {
            self.disableRemoteControl = disableRemoteControl
            self.enableDialOut = enableDialOut
        }

        private enum CodingKeys: String, CodingKey {
            case disableRemoteControl = "DisableRemoteControl"
            case enableDialOut = "EnableDialOut"
        }
    }

    public struct AlexaForBusinessMetadata: AWSEncodableShape & AWSDecodableShape {
        /// The ARN of the room resource.
        public let alexaForBusinessRoomArn: String?
        /// Starts or stops Alexa for Business.
        public let isAlexaForBusinessEnabled: Bool?

        public init(alexaForBusinessRoomArn: String? = nil, isAlexaForBusinessEnabled: Bool? = nil) {
            self.alexaForBusinessRoomArn = alexaForBusinessRoomArn
            self.isAlexaForBusinessEnabled = isAlexaForBusinessEnabled
        }

        private enum CodingKeys: String, CodingKey {
            case alexaForBusinessRoomArn = "AlexaForBusinessRoomArn"
            case isAlexaForBusinessEnabled = "IsAlexaForBusinessEnabled"
        }
    }

    public struct AppInstance: AWSDecodableShape {
        /// The ARN of the messaging instance.
        public let appInstanceArn: String?
        /// The time at which an AppInstance was created. In epoch milliseconds.
        public let createdTimestamp: Date?
        /// The time an AppInstance was last updated. In epoch milliseconds.
        public let lastUpdatedTimestamp: Date?
        /// The metadata of an AppInstance.
        public let metadata: String?
        /// The name of an AppInstance.
        public let name: String?

        public init(appInstanceArn: String? = nil, createdTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, metadata: String? = nil, name: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.createdTimestamp = createdTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.metadata = metadata
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case createdTimestamp = "CreatedTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct AppInstanceAdmin: AWSDecodableShape {
        /// The AppInstanceAdmin data.
        public let admin: Identity?
        /// The ARN of the AppInstance for which the user is an administrator.
        public let appInstanceArn: String?
        /// The time at which an administrator was created.
        public let createdTimestamp: Date?

        public init(admin: Identity? = nil, appInstanceArn: String? = nil, createdTimestamp: Date? = nil) {
            self.admin = admin
            self.appInstanceArn = appInstanceArn
            self.createdTimestamp = createdTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case admin = "Admin"
            case appInstanceArn = "AppInstanceArn"
            case createdTimestamp = "CreatedTimestamp"
        }
    }

    public struct AppInstanceAdminSummary: AWSDecodableShape {
        /// The details of the AppInstanceAdmin.
        public let admin: Identity?

        public init(admin: Identity? = nil) {
            self.admin = admin
        }

        private enum CodingKeys: String, CodingKey {
            case admin = "Admin"
        }
    }

    public struct AppInstanceRetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The length of time in days to retain the messages in a channel.
        public let channelRetentionSettings: ChannelRetentionSettings?

        public init(channelRetentionSettings: ChannelRetentionSettings? = nil) {
            self.channelRetentionSettings = channelRetentionSettings
        }

        public func validate(name: String) throws {
            try self.channelRetentionSettings?.validate(name: "\(name).channelRetentionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case channelRetentionSettings = "ChannelRetentionSettings"
        }
    }

    public struct AppInstanceStreamingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The type of data to be streamed.
        public let appInstanceDataType: AppInstanceDataType
        /// The resource ARN.
        public let resourceArn: String

        public init(appInstanceDataType: AppInstanceDataType, resourceArn: String) {
            self.appInstanceDataType = appInstanceDataType
            self.resourceArn = resourceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, max: 1024)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, min: 1)
            try self.validate(self.resourceArn, name: "resourceArn", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceDataType = "AppInstanceDataType"
            case resourceArn = "ResourceArn"
        }
    }

    public struct AppInstanceSummary: AWSDecodableShape {
        /// The AppInstance ARN.
        public let appInstanceArn: String?
        /// The metadata of the AppInstance.
        public let metadata: String?
        /// The name of the AppInstance.
        public let name: String?

        public init(appInstanceArn: String? = nil, metadata: String? = nil, name: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.metadata = metadata
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct AppInstanceUser: AWSDecodableShape {
        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String?
        /// The time at which the AppInstanceUser was created.
        public let createdTimestamp: Date?
        /// The time at which the AppInstanceUser was last updated.
        public let lastUpdatedTimestamp: Date?
        /// The metadata of the AppInstanceUser.
        public let metadata: String?
        /// The name of the AppInstanceUser.
        public let name: String?

        public init(appInstanceUserArn: String? = nil, createdTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, metadata: String? = nil, name: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.createdTimestamp = createdTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.metadata = metadata
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserArn = "AppInstanceUserArn"
            case createdTimestamp = "CreatedTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct AppInstanceUserMembershipSummary: AWSDecodableShape {
        /// The time at which a message was last read.
        public let readMarkerTimestamp: Date?
        /// The type of ChannelMembership.
        public let type: ChannelMembershipType?

        public init(readMarkerTimestamp: Date? = nil, type: ChannelMembershipType? = nil) {
            self.readMarkerTimestamp = readMarkerTimestamp
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case readMarkerTimestamp = "ReadMarkerTimestamp"
            case type = "Type"
        }
    }

    public struct AppInstanceUserSummary: AWSDecodableShape {
        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String?
        /// The metadata of the AppInstanceUser.
        public let metadata: String?
        /// The name of an AppInstanceUser.
        public let name: String?

        public init(appInstanceUserArn: String? = nil, metadata: String? = nil, name: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.metadata = metadata
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserArn = "AppInstanceUserArn"
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct AssociatePhoneNumberWithUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "userId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The phone number, in E.164 format.
        public let e164PhoneNumber: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, e164PhoneNumber: String, userId: String) {
            self.accountId = accountId
            self.e164PhoneNumber = e164PhoneNumber
            self.userId = userId
        }

        public func validate(name: String) throws {
            try self.validate(self.e164PhoneNumber, name: "e164PhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumber = "E164PhoneNumber"
        }
    }

    public struct AssociatePhoneNumberWithUserResponse: AWSDecodableShape {
        public init() {}
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri(locationName: "voiceConnectorGroupId"))
        ]

        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// If true, associates the provided phone numbers with the provided Amazon Chime Voice Connector Group and removes any previously existing associations. If false, does not associate any phone numbers that have previously existing associations.
        public let forceAssociate: Bool?
        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String

        public init(e164PhoneNumbers: [String], forceAssociate: Bool? = nil, voiceConnectorGroupId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.forceAssociate = forceAssociate
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case forceAssociate = "ForceAssociate"
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorGroupResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// If true, associates the provided phone numbers with the provided Amazon Chime Voice Connector and removes any previously existing associations. If false, does not associate any phone numbers that have previously existing associations.
        public let forceAssociate: Bool?
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(e164PhoneNumbers: [String], forceAssociate: Bool? = nil, voiceConnectorId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.forceAssociate = forceAssociate
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case forceAssociate = "ForceAssociate"
        }
    }

    public struct AssociatePhoneNumbersWithVoiceConnectorResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct AssociateSigninDelegateGroupsWithAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The sign-in delegate groups.
        public let signinDelegateGroups: [SigninDelegateGroup]

        public init(accountId: String, signinDelegateGroups: [SigninDelegateGroup]) {
            self.accountId = accountId
            self.signinDelegateGroups = signinDelegateGroups
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.signinDelegateGroups.forEach {
                try $0.validate(name: "\(name).signinDelegateGroups[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case signinDelegateGroups = "SigninDelegateGroups"
        }
    }

    public struct AssociateSigninDelegateGroupsWithAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Attendee: AWSDecodableShape {
        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String?
        /// The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.
        public let externalUserId: String?
        /// The join token used by the Amazon Chime SDK attendee.
        public let joinToken: String?

        public init(attendeeId: String? = nil, externalUserId: String? = nil, joinToken: String? = nil) {
            self.attendeeId = attendeeId
            self.externalUserId = externalUserId
            self.joinToken = joinToken
        }

        private enum CodingKeys: String, CodingKey {
            case attendeeId = "AttendeeId"
            case externalUserId = "ExternalUserId"
            case joinToken = "JoinToken"
        }
    }

    public struct BatchCreateAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The request containing the attendees to create.
        public let attendees: [CreateAttendeeRequestItem]
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(attendees: [CreateAttendeeRequestItem], meetingId: String) {
            self.attendees = attendees
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.attendees.forEach {
                try $0.validate(name: "\(name).attendees[]")
            }
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
        }
    }

    public struct BatchCreateAttendeeResponse: AWSDecodableShape {
        /// The attendee information, including attendees IDs and join tokens.
        public let attendees: [Attendee]?
        /// If the action fails for one or more of the attendees in the request, a list of the attendees is returned, along with error codes and error messages.
        public let errors: [CreateAttendeeError]?

        public init(attendees: [Attendee]? = nil, errors: [CreateAttendeeError]? = nil) {
            self.attendees = attendees
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
            case errors = "Errors"
        }
    }

    public struct BatchCreateRoomMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "roomId", location: .uri(locationName: "roomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The list of membership items.
        public let membershipItemList: [MembershipItem]
        /// The room ID.
        public let roomId: String

        public init(accountId: String, membershipItemList: [MembershipItem], roomId: String) {
            self.accountId = accountId
            self.membershipItemList = membershipItemList
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.membershipItemList.forEach {
                try $0.validate(name: "\(name).membershipItemList[]")
            }
            try self.validate(self.membershipItemList, name: "membershipItemList", parent: name, max: 50)
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case membershipItemList = "MembershipItemList"
        }
    }

    public struct BatchCreateRoomMembershipResponse: AWSDecodableShape {
        /// If the action fails for one or more of the member IDs in the request, a list of the member IDs is returned, along with error codes and error messages.
        public let errors: [MemberError]?

        public init(errors: [MemberError]? = nil) {
            self.errors = errors
        }

        private enum CodingKeys: String, CodingKey {
            case errors = "Errors"
        }
    }

    public struct BatchDeletePhoneNumberRequest: AWSEncodableShape {
        /// List of phone number IDs.
        public let phoneNumberIds: [String]

        public init(phoneNumberIds: [String]) {
            self.phoneNumberIds = phoneNumberIds
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberIds, name: "phoneNumberIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberIds = "PhoneNumberIds"
        }
    }

    public struct BatchDeletePhoneNumberResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct BatchSuspendUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The request containing the user IDs to suspend.
        public let userIdList: [String]

        public init(accountId: String, userIdList: [String]) {
            self.accountId = accountId
            self.userIdList = userIdList
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.userIdList.forEach {
                try validate($0, name: "userIdList[]", parent: name, pattern: ".*\\S.*")
            }
            try self.validate(self.userIdList, name: "userIdList", parent: name, max: 50)
        }

        private enum CodingKeys: String, CodingKey {
            case userIdList = "UserIdList"
        }
    }

    public struct BatchSuspendUserResponse: AWSDecodableShape {
        /// If the BatchSuspendUser action fails for one or more of the user IDs in the request, a list of the user IDs is returned, along with error codes and error messages.
        public let userErrors: [UserError]?

        public init(userErrors: [UserError]? = nil) {
            self.userErrors = userErrors
        }

        private enum CodingKeys: String, CodingKey {
            case userErrors = "UserErrors"
        }
    }

    public struct BatchUnsuspendUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The request containing the user IDs to unsuspend.
        public let userIdList: [String]

        public init(accountId: String, userIdList: [String]) {
            self.accountId = accountId
            self.userIdList = userIdList
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.userIdList.forEach {
                try validate($0, name: "userIdList[]", parent: name, pattern: ".*\\S.*")
            }
            try self.validate(self.userIdList, name: "userIdList", parent: name, max: 50)
        }

        private enum CodingKeys: String, CodingKey {
            case userIdList = "UserIdList"
        }
    }

    public struct BatchUnsuspendUserResponse: AWSDecodableShape {
        /// If the BatchUnsuspendUser action fails for one or more of the user IDs in the request, a list of the user IDs is returned, along with error codes and error messages.
        public let userErrors: [UserError]?

        public init(userErrors: [UserError]? = nil) {
            self.userErrors = userErrors
        }

        private enum CodingKeys: String, CodingKey {
            case userErrors = "UserErrors"
        }
    }

    public struct BatchUpdatePhoneNumberRequest: AWSEncodableShape {
        /// The request containing the phone number IDs and product types or calling names to update.
        public let updatePhoneNumberRequestItems: [UpdatePhoneNumberRequestItem]

        public init(updatePhoneNumberRequestItems: [UpdatePhoneNumberRequestItem]) {
            self.updatePhoneNumberRequestItems = updatePhoneNumberRequestItems
        }

        public func validate(name: String) throws {
            try self.updatePhoneNumberRequestItems.forEach {
                try $0.validate(name: "\(name).updatePhoneNumberRequestItems[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case updatePhoneNumberRequestItems = "UpdatePhoneNumberRequestItems"
        }
    }

    public struct BatchUpdatePhoneNumberResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct BatchUpdateUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The request containing the user IDs and details to update.
        public let updateUserRequestItems: [UpdateUserRequestItem]

        public init(accountId: String, updateUserRequestItems: [UpdateUserRequestItem]) {
            self.accountId = accountId
            self.updateUserRequestItems = updateUserRequestItems
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.updateUserRequestItems.forEach {
                try $0.validate(name: "\(name).updateUserRequestItems[]")
            }
            try self.validate(self.updateUserRequestItems, name: "updateUserRequestItems", parent: name, max: 20)
        }

        private enum CodingKeys: String, CodingKey {
            case updateUserRequestItems = "UpdateUserRequestItems"
        }
    }

    public struct BatchUpdateUserResponse: AWSDecodableShape {
        /// If the BatchUpdateUser action fails for one or more of the user IDs in the request, a list of the user IDs is returned, along with error codes and error messages.
        public let userErrors: [UserError]?

        public init(userErrors: [UserError]? = nil) {
            self.userErrors = userErrors
        }

        private enum CodingKeys: String, CodingKey {
            case userErrors = "UserErrors"
        }
    }

    public struct Bot: AWSDecodableShape {
        /// The bot email address.
        public let botEmail: String?
        /// The bot ID.
        public let botId: String?
        /// The bot type.
        public let botType: BotType?
        /// The bot creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// When true, the bot is stopped from running in your account.
        public let disabled: Bool?
        /// The bot display name.
        public let displayName: String?
        /// The security token used to authenticate Amazon Chime with the outgoing event endpoint.
        public let securityToken: String?
        /// The updated bot timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        /// The unique ID for the bot user.
        public let userId: String?

        public init(botEmail: String? = nil, botId: String? = nil, botType: BotType? = nil, createdTimestamp: Date? = nil, disabled: Bool? = nil, displayName: String? = nil, securityToken: String? = nil, updatedTimestamp: Date? = nil, userId: String? = nil) {
            self.botEmail = botEmail
            self.botId = botId
            self.botType = botType
            self.createdTimestamp = createdTimestamp
            self.disabled = disabled
            self.displayName = displayName
            self.securityToken = securityToken
            self.updatedTimestamp = updatedTimestamp
            self.userId = userId
        }

        private enum CodingKeys: String, CodingKey {
            case botEmail = "BotEmail"
            case botId = "BotId"
            case botType = "BotType"
            case createdTimestamp = "CreatedTimestamp"
            case disabled = "Disabled"
            case displayName = "DisplayName"
            case securityToken = "SecurityToken"
            case updatedTimestamp = "UpdatedTimestamp"
            case userId = "UserId"
        }
    }

    public struct BusinessCallingSettings: AWSEncodableShape & AWSDecodableShape {
        /// The Amazon S3 bucket designated for call detail record storage.
        public let cdrBucket: String?

        public init(cdrBucket: String? = nil) {
            self.cdrBucket = cdrBucket
        }

        private enum CodingKeys: String, CodingKey {
            case cdrBucket = "CdrBucket"
        }
    }

    public struct Channel: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The AppInstanceUser who created the channel.
        public let createdBy: Identity?
        /// The time at which the AppInstanceUser created the channel.
        public let createdTimestamp: Date?
        /// The time at which a member sent the last message in the channel.
        public let lastMessageTimestamp: Date?
        /// The time at which a channel was last updated.
        public let lastUpdatedTimestamp: Date?
        /// The channel's metadata.
        public let metadata: String?
        /// The mode of the channel.
        public let mode: ChannelMode?
        /// The name of the channel.
        public let name: String?
        /// The channel's privacy setting.
        public let privacy: ChannelPrivacy?

        public init(channelArn: String? = nil, createdBy: Identity? = nil, createdTimestamp: Date? = nil, lastMessageTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, metadata: String? = nil, mode: ChannelMode? = nil, name: String? = nil, privacy: ChannelPrivacy? = nil) {
            self.channelArn = channelArn
            self.createdBy = createdBy
            self.createdTimestamp = createdTimestamp
            self.lastMessageTimestamp = lastMessageTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.metadata = metadata
            self.mode = mode
            self.name = name
            self.privacy = privacy
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case createdBy = "CreatedBy"
            case createdTimestamp = "CreatedTimestamp"
            case lastMessageTimestamp = "LastMessageTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case metadata = "Metadata"
            case mode = "Mode"
            case name = "Name"
            case privacy = "Privacy"
        }
    }

    public struct ChannelBan: AWSDecodableShape {
        /// The ARN of the channel from which a member is being banned.
        public let channelArn: String?
        /// The AppInstanceUser who created the ban.
        public let createdBy: Identity?
        /// The time at which the ban was created.
        public let createdTimestamp: Date?
        /// The member being banned from the channel.
        public let member: Identity?

        public init(channelArn: String? = nil, createdBy: Identity? = nil, createdTimestamp: Date? = nil, member: Identity? = nil) {
            self.channelArn = channelArn
            self.createdBy = createdBy
            self.createdTimestamp = createdTimestamp
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case createdBy = "CreatedBy"
            case createdTimestamp = "CreatedTimestamp"
            case member = "Member"
        }
    }

    public struct ChannelBanSummary: AWSDecodableShape {
        /// The member being banned from a channel.
        public let member: Identity?

        public init(member: Identity? = nil) {
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case member = "Member"
        }
    }

    public struct ChannelMembership: AWSDecodableShape {
        /// The ARN of the member's channel.
        public let channelArn: String?
        /// The time at which the channel membership was created.
        public let createdTimestamp: Date?
        /// The identifier of the member who invited another member.
        public let invitedBy: Identity?
        /// The time at which a channel membership was last updated.
        public let lastUpdatedTimestamp: Date?
        /// The data of the channel member.
        public let member: Identity?
        /// The membership type set for the channel member.
        public let type: ChannelMembershipType?

        public init(channelArn: String? = nil, createdTimestamp: Date? = nil, invitedBy: Identity? = nil, lastUpdatedTimestamp: Date? = nil, member: Identity? = nil, type: ChannelMembershipType? = nil) {
            self.channelArn = channelArn
            self.createdTimestamp = createdTimestamp
            self.invitedBy = invitedBy
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.member = member
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case createdTimestamp = "CreatedTimestamp"
            case invitedBy = "InvitedBy"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case member = "Member"
            case type = "Type"
        }
    }

    public struct ChannelMembershipForAppInstanceUserSummary: AWSDecodableShape {
        /// Returns the channel membership data for an AppInstance.
        public let appInstanceUserMembershipSummary: AppInstanceUserMembershipSummary?
        public let channelSummary: ChannelSummary?

        public init(appInstanceUserMembershipSummary: AppInstanceUserMembershipSummary? = nil, channelSummary: ChannelSummary? = nil) {
            self.appInstanceUserMembershipSummary = appInstanceUserMembershipSummary
            self.channelSummary = channelSummary
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserMembershipSummary = "AppInstanceUserMembershipSummary"
            case channelSummary = "ChannelSummary"
        }
    }

    public struct ChannelMembershipSummary: AWSDecodableShape {
        /// A member's summary data.
        public let member: Identity?

        public init(member: Identity? = nil) {
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case member = "Member"
        }
    }

    public struct ChannelMessage: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The message content.
        public let content: String?
        /// The time at which the message was created.
        public let createdTimestamp: Date?
        /// The time at which a message was edited.
        public let lastEditedTimestamp: Date?
        /// The time at which a message was updated.
        public let lastUpdatedTimestamp: Date?
        /// The ID of a message.
        public let messageId: String?
        /// The message metadata.
        public let metadata: String?
        /// The persistence setting for a channel message.
        public let persistence: ChannelMessagePersistenceType?
        /// Hides the content of a message.
        public let redacted: Bool?
        /// The message sender.
        public let sender: Identity?
        /// The message type.
        public let type: ChannelMessageType?

        public init(channelArn: String? = nil, content: String? = nil, createdTimestamp: Date? = nil, lastEditedTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, messageId: String? = nil, metadata: String? = nil, persistence: ChannelMessagePersistenceType? = nil, redacted: Bool? = nil, sender: Identity? = nil, type: ChannelMessageType? = nil) {
            self.channelArn = channelArn
            self.content = content
            self.createdTimestamp = createdTimestamp
            self.lastEditedTimestamp = lastEditedTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.messageId = messageId
            self.metadata = metadata
            self.persistence = persistence
            self.redacted = redacted
            self.sender = sender
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case content = "Content"
            case createdTimestamp = "CreatedTimestamp"
            case lastEditedTimestamp = "LastEditedTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case messageId = "MessageId"
            case metadata = "Metadata"
            case persistence = "Persistence"
            case redacted = "Redacted"
            case sender = "Sender"
            case type = "Type"
        }
    }

    public struct ChannelMessageSummary: AWSDecodableShape {
        /// The content of the message.
        public let content: String?
        /// The time at which the message summary was created.
        public let createdTimestamp: Date?
        /// The time at which a message was last edited.
        public let lastEditedTimestamp: Date?
        /// The time at which a message was last updated.
        public let lastUpdatedTimestamp: Date?
        /// The ID of the message.
        public let messageId: String?
        /// The metadata of the message.
        public let metadata: String?
        /// Indicates whether a message was redacted.
        public let redacted: Bool?
        /// The message sender.
        public let sender: Identity?
        /// The type of message.
        public let type: ChannelMessageType?

        public init(content: String? = nil, createdTimestamp: Date? = nil, lastEditedTimestamp: Date? = nil, lastUpdatedTimestamp: Date? = nil, messageId: String? = nil, metadata: String? = nil, redacted: Bool? = nil, sender: Identity? = nil, type: ChannelMessageType? = nil) {
            self.content = content
            self.createdTimestamp = createdTimestamp
            self.lastEditedTimestamp = lastEditedTimestamp
            self.lastUpdatedTimestamp = lastUpdatedTimestamp
            self.messageId = messageId
            self.metadata = metadata
            self.redacted = redacted
            self.sender = sender
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case content = "Content"
            case createdTimestamp = "CreatedTimestamp"
            case lastEditedTimestamp = "LastEditedTimestamp"
            case lastUpdatedTimestamp = "LastUpdatedTimestamp"
            case messageId = "MessageId"
            case metadata = "Metadata"
            case redacted = "Redacted"
            case sender = "Sender"
            case type = "Type"
        }
    }

    public struct ChannelModeratedByAppInstanceUserSummary: AWSDecodableShape {
        public let channelSummary: ChannelSummary?

        public init(channelSummary: ChannelSummary? = nil) {
            self.channelSummary = channelSummary
        }

        private enum CodingKeys: String, CodingKey {
            case channelSummary = "ChannelSummary"
        }
    }

    public struct ChannelModerator: AWSDecodableShape {
        /// The ARN of the moderator's channel.
        public let channelArn: String?
        /// The AppInstanceUser who created the moderator.
        public let createdBy: Identity?
        /// The time at which the moderator was created.
        public let createdTimestamp: Date?
        /// The moderator's data.
        public let moderator: Identity?

        public init(channelArn: String? = nil, createdBy: Identity? = nil, createdTimestamp: Date? = nil, moderator: Identity? = nil) {
            self.channelArn = channelArn
            self.createdBy = createdBy
            self.createdTimestamp = createdTimestamp
            self.moderator = moderator
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case createdBy = "CreatedBy"
            case createdTimestamp = "CreatedTimestamp"
            case moderator = "Moderator"
        }
    }

    public struct ChannelModeratorSummary: AWSDecodableShape {
        /// The data for a moderator.
        public let moderator: Identity?

        public init(moderator: Identity? = nil) {
            self.moderator = moderator
        }

        private enum CodingKeys: String, CodingKey {
            case moderator = "Moderator"
        }
    }

    public struct ChannelRetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The time in days to retain the messages in a channel.
        public let retentionDays: Int?

        public init(retentionDays: Int? = nil) {
            self.retentionDays = retentionDays
        }

        public func validate(name: String) throws {
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, max: 5475)
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case retentionDays = "RetentionDays"
        }
    }

    public struct ChannelSummary: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The time at which the last message in a channel was sent.
        public let lastMessageTimestamp: Date?
        /// The metadata of the channel.
        public let metadata: String?
        /// The mode of the channel.
        public let mode: ChannelMode?
        /// The name of the channel.
        public let name: String?
        /// The privacy setting of the channel.
        public let privacy: ChannelPrivacy?

        public init(channelArn: String? = nil, lastMessageTimestamp: Date? = nil, metadata: String? = nil, mode: ChannelMode? = nil, name: String? = nil, privacy: ChannelPrivacy? = nil) {
            self.channelArn = channelArn
            self.lastMessageTimestamp = lastMessageTimestamp
            self.metadata = metadata
            self.mode = mode
            self.name = name
            self.privacy = privacy
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case lastMessageTimestamp = "LastMessageTimestamp"
            case metadata = "Metadata"
            case mode = "Mode"
            case name = "Name"
            case privacy = "Privacy"
        }
    }

    public struct ConversationRetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The number of days for which to retain conversation messages.
        public let retentionDays: Int?

        public init(retentionDays: Int? = nil) {
            self.retentionDays = retentionDays
        }

        public func validate(name: String) throws {
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, max: 5475)
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case retentionDays = "RetentionDays"
        }
    }

    public struct CreateAccountRequest: AWSEncodableShape {
        /// The name of the Amazon Chime account.
        public let name: String

        public init(name: String) {
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
        }
    }

    public struct CreateAccountResponse: AWSDecodableShape {
        /// The Amazon Chime account details.
        public let account: Account?

        public init(account: Account? = nil) {
            self.account = account
        }

        private enum CodingKeys: String, CodingKey {
            case account = "Account"
        }
    }

    public struct CreateAppInstanceAdminRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the administrator of the current AppInstance.
        public let appInstanceAdminArn: String
        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceAdminArn: String, appInstanceArn: String) {
            self.appInstanceAdminArn = appInstanceAdminArn
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, max: 1600)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, min: 5)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceAdminArn = "AppInstanceAdminArn"
        }
    }

    public struct CreateAppInstanceAdminResponse: AWSDecodableShape {
        /// The name and ARN of the admin for the AppInstance.
        public let appInstanceAdmin: Identity?
        /// The ARN of the of the admin for the AppInstance.
        public let appInstanceArn: String?

        public init(appInstanceAdmin: Identity? = nil, appInstanceArn: String? = nil) {
            self.appInstanceAdmin = appInstanceAdmin
            self.appInstanceArn = appInstanceArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceAdmin = "AppInstanceAdmin"
            case appInstanceArn = "AppInstanceArn"
        }
    }

    public struct CreateAppInstanceRequest: AWSEncodableShape {
        /// The ClientRequestToken of the AppInstance.
        public let clientRequestToken: String
        /// The metadata of the AppInstance. Limited to a 1KB string in UTF-8.
        public let metadata: String?
        /// The name of the AppInstance.
        public let name: String
        /// Tags assigned to the AppInstanceUser.
        public let tags: [Tag]?

        public init(clientRequestToken: String = CreateAppInstanceRequest.idempotencyToken(), metadata: String? = nil, name: String, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.metadata = metadata
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "[-_a-zA-Z0-9]*")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, min: 0)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case metadata = "Metadata"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateAppInstanceResponse: AWSDecodableShape {
        /// The Amazon Resource Number (ARN) of the AppInstance.
        public let appInstanceArn: String?

        public init(appInstanceArn: String? = nil) {
            self.appInstanceArn = appInstanceArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
        }
    }

    public struct CreateAppInstanceUserRequest: AWSEncodableShape {
        /// The ARN of the AppInstance request.
        public let appInstanceArn: String
        /// The user ID of the AppInstance.
        public let appInstanceUserId: String
        /// The token assigned to the user requesting an AppInstance.
        public let clientRequestToken: String
        /// The request's metadata. Limited to a 1KB string in UTF-8.
        public let metadata: String?
        /// The user's name.
        public let name: String
        /// Tags assigned to the AppInstanceUser.
        public let tags: [Tag]?

        public init(appInstanceArn: String, appInstanceUserId: String, clientRequestToken: String = CreateAppInstanceUserRequest.idempotencyToken(), metadata: String? = nil, name: String, tags: [Tag]? = nil) {
            self.appInstanceArn = appInstanceArn
            self.appInstanceUserId = appInstanceUserId
            self.clientRequestToken = clientRequestToken
            self.metadata = metadata
            self.name = name
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.appInstanceUserId, name: "appInstanceUserId", parent: name, max: 50)
            try self.validate(self.appInstanceUserId, name: "appInstanceUserId", parent: name, min: 1)
            try self.validate(self.appInstanceUserId, name: "appInstanceUserId", parent: name, pattern: "[A-Za-z0-9][A-Za-z0-9\\:\\-\\_\\.\\@]{3,50}[A-Za-z0-9]")
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "[-_a-zA-Z0-9]*")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, min: 0)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: ".*\\S.*")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case appInstanceUserId = "AppInstanceUserId"
            case clientRequestToken = "ClientRequestToken"
            case metadata = "Metadata"
            case name = "Name"
            case tags = "Tags"
        }
    }

    public struct CreateAppInstanceUserResponse: AWSDecodableShape {
        /// The user's ARN.
        public let appInstanceUserArn: String?

        public init(appInstanceUserArn: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserArn = "AppInstanceUserArn"
        }
    }

    public struct CreateAttendeeError: AWSDecodableShape {
        /// The error code.
        public let errorCode: String?
        /// The error message.
        public let errorMessage: String?
        /// The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.
        public let externalUserId: String?

        public init(errorCode: String? = nil, errorMessage: String? = nil, externalUserId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.externalUserId = externalUserId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case externalUserId = "ExternalUserId"
        }
    }

    public struct CreateAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.
        public let externalUserId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag key-value pairs.
        public let tags: [Tag]?

        public init(externalUserId: String, meetingId: String, tags: [Tag]? = nil) {
            self.externalUserId = externalUserId
            self.meetingId = meetingId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.externalUserId, name: "externalUserId", parent: name, max: 64)
            try self.validate(self.externalUserId, name: "externalUserId", parent: name, min: 2)
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 10)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case externalUserId = "ExternalUserId"
            case tags = "Tags"
        }
    }

    public struct CreateAttendeeRequestItem: AWSEncodableShape {
        /// The Amazon Chime SDK external user ID. An idempotency token. Links the attendee to an identity managed by a builder application.
        public let externalUserId: String
        /// The tag key-value pairs.
        public let tags: [Tag]?

        public init(externalUserId: String, tags: [Tag]? = nil) {
            self.externalUserId = externalUserId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.externalUserId, name: "externalUserId", parent: name, max: 64)
            try self.validate(self.externalUserId, name: "externalUserId", parent: name, min: 2)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 10)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case externalUserId = "ExternalUserId"
            case tags = "Tags"
        }
    }

    public struct CreateAttendeeResponse: AWSDecodableShape {
        /// The attendee information, including attendee ID and join token.
        public let attendee: Attendee?

        public init(attendee: Attendee? = nil) {
            self.attendee = attendee
        }

        private enum CodingKeys: String, CodingKey {
            case attendee = "Attendee"
        }
    }

    public struct CreateBotRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot display name.
        public let displayName: String
        /// The domain of the Amazon Chime Enterprise account.
        public let domain: String?

        public init(accountId: String, displayName: String, domain: String? = nil) {
            self.accountId = accountId
            self.displayName = displayName
            self.domain = domain
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.domain, name: "domain", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case displayName = "DisplayName"
            case domain = "Domain"
        }
    }

    public struct CreateBotResponse: AWSDecodableShape {
        /// The bot details.
        public let bot: Bot?

        public init(bot: Bot? = nil) {
            self.bot = bot
        }

        private enum CodingKeys: String, CodingKey {
            case bot = "Bot"
        }
    }

    public struct CreateChannelBanRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the ban request.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member being banned.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: String, CodingKey {
            case memberArn = "MemberArn"
        }
    }

    public struct CreateChannelBanResponse: AWSDecodableShape {
        /// The ARN of the response to the ban request.
        public let channelArn: String?
        /// The ChannelArn and BannedIdentity of the member in the ban response.
        public let member: Identity?

        public init(channelArn: String? = nil, member: Identity? = nil) {
            self.channelArn = channelArn
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case member = "Member"
        }
    }

    public struct CreateChannelMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel to which you're adding users.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member you want to add to the channel.
        public let memberArn: String
        /// The membership type of a user, DEFAULT or HIDDEN. Default members are always returned as part of ListChannelMemberships. Hidden members are only returned if the type filter in ListChannelMemberships equals HIDDEN. Otherwise hidden members are not returned. This is only supported by moderators.
        public let type: ChannelMembershipType

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String, type: ChannelMembershipType) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: String, CodingKey {
            case memberArn = "MemberArn"
            case type = "Type"
        }
    }

    public struct CreateChannelMembershipResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The ARN and metadata of the member being added.
        public let member: Identity?

        public init(channelArn: String? = nil, member: Identity? = nil) {
            self.channelArn = channelArn
            self.member = member
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case member = "Member"
        }
    }

    public struct CreateChannelModeratorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The ARN of the moderator.
        public let channelModeratorArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, channelModeratorArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.channelModeratorArn = channelModeratorArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, max: 1600)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, min: 5)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: String, CodingKey {
            case channelModeratorArn = "ChannelModeratorArn"
        }
    }

    public struct CreateChannelModeratorResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The ARNs of the channel and the moderator.
        public let channelModerator: Identity?

        public init(channelArn: String? = nil, channelModerator: Identity? = nil) {
            self.channelArn = channelArn
            self.channelModerator = channelModerator
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelModerator = "ChannelModerator"
        }
    }

    public struct CreateChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel request.
        public let appInstanceArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The client token for the request. An Idempotency token.
        public let clientRequestToken: String
        /// The metadata of the creation request. Limited to 1KB and UTF-8.
        public let metadata: String?
        /// The channel mode: UNRESTRICTED or RESTRICTED. Administrators, moderators, and channel members can add themselves and other members to unrestricted channels. Only administrators and moderators can add members to restricted channels.
        public let mode: ChannelMode?
        /// The name of the channel.
        public let name: String
        /// The channel's privacy level: PUBLIC or PRIVATE. Private channels aren't discoverable by users outside the channel. Public channels are discoverable by anyone in the AppInstance.
        public let privacy: ChannelPrivacy?
        /// The tags for the creation request.
        public let tags: [Tag]?

        public init(appInstanceArn: String, chimeBearer: String? = nil, clientRequestToken: String = CreateChannelRequest.idempotencyToken(), metadata: String? = nil, mode: ChannelMode? = nil, name: String, privacy: ChannelPrivacy? = nil, tags: [Tag]? = nil) {
            self.appInstanceArn = appInstanceArn
            self.chimeBearer = chimeBearer
            self.clientRequestToken = clientRequestToken
            self.metadata = metadata
            self.mode = mode
            self.name = name
            self.privacy = privacy
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "[-_a-zA-Z0-9]*")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, min: 0)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case clientRequestToken = "ClientRequestToken"
            case metadata = "Metadata"
            case mode = "Mode"
            case name = "Name"
            case privacy = "Privacy"
            case tags = "Tags"
        }
    }

    public struct CreateChannelResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?

        public init(channelArn: String? = nil) {
            self.channelArn = channelArn
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
        }
    }

    public struct CreateMeetingDialOutRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// Phone number used as the caller ID when the remote party receives a call.
        public let fromPhoneNumber: String
        /// Token used by the Amazon Chime SDK attendee. Call the CreateAttendee action to get a join token.
        public let joinToken: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// Phone number called when inviting someone to a meeting.
        public let toPhoneNumber: String

        public init(fromPhoneNumber: String, joinToken: String, meetingId: String, toPhoneNumber: String) {
            self.fromPhoneNumber = fromPhoneNumber
            self.joinToken = joinToken
            self.meetingId = meetingId
            self.toPhoneNumber = toPhoneNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.fromPhoneNumber, name: "fromPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.validate(self.joinToken, name: "joinToken", parent: name, max: 2048)
            try self.validate(self.joinToken, name: "joinToken", parent: name, min: 2)
            try self.validate(self.joinToken, name: "joinToken", parent: name, pattern: "^[a-zA-Z0-9+/]+$")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.validate(self.toPhoneNumber, name: "toPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case fromPhoneNumber = "FromPhoneNumber"
            case joinToken = "JoinToken"
            case toPhoneNumber = "ToPhoneNumber"
        }
    }

    public struct CreateMeetingDialOutResponse: AWSDecodableShape {
        /// Unique ID that tracks API calls.
        public let transactionId: String?

        public init(transactionId: String? = nil) {
            self.transactionId = transactionId
        }

        private enum CodingKeys: String, CodingKey {
            case transactionId = "TransactionId"
        }
    }

    public struct CreateMeetingRequest: AWSEncodableShape {
        /// The unique identifier for the client request. Use a different token for different meetings.
        public let clientRequestToken: String
        /// The external meeting ID.
        public let externalMeetingId: String?
        ///  The Region in which to create the meeting. Default: us-east-1.   Available values: af-south-1 , ap-northeast-1 , ap-northeast-2 , ap-south-1 , ap-southeast-1 , ap-southeast-2 , ca-central-1 , eu-central-1 , eu-north-1 , eu-south-1 , eu-west-1 , eu-west-2 , eu-west-3 , sa-east-1 , us-east-1 , us-east-2 , us-west-1 , us-west-2 .
        public let mediaRegion: String?
        /// Reserved.
        public let meetingHostId: String?
        /// The configuration for resource targets to receive notifications when meeting and attendee events occur.
        public let notificationsConfiguration: MeetingNotificationConfiguration?
        /// The tag key-value pairs.
        public let tags: [Tag]?

        public init(clientRequestToken: String = CreateMeetingRequest.idempotencyToken(), externalMeetingId: String? = nil, mediaRegion: String? = nil, meetingHostId: String? = nil, notificationsConfiguration: MeetingNotificationConfiguration? = nil, tags: [Tag]? = nil) {
            self.clientRequestToken = clientRequestToken
            self.externalMeetingId = externalMeetingId
            self.mediaRegion = mediaRegion
            self.meetingHostId = meetingHostId
            self.notificationsConfiguration = notificationsConfiguration
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "[-_a-zA-Z0-9]*")
            try self.validate(self.externalMeetingId, name: "externalMeetingId", parent: name, max: 64)
            try self.validate(self.externalMeetingId, name: "externalMeetingId", parent: name, min: 2)
            try self.validate(self.meetingHostId, name: "meetingHostId", parent: name, max: 64)
            try self.validate(self.meetingHostId, name: "meetingHostId", parent: name, min: 2)
            try self.notificationsConfiguration?.validate(name: "\(name).notificationsConfiguration")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case externalMeetingId = "ExternalMeetingId"
            case mediaRegion = "MediaRegion"
            case meetingHostId = "MeetingHostId"
            case notificationsConfiguration = "NotificationsConfiguration"
            case tags = "Tags"
        }
    }

    public struct CreateMeetingResponse: AWSDecodableShape {
        ///  The meeting information, including the meeting ID and MediaPlacement .
        public let meeting: Meeting?

        public init(meeting: Meeting? = nil) {
            self.meeting = meeting
        }

        private enum CodingKeys: String, CodingKey {
            case meeting = "Meeting"
        }
    }

    public struct CreateMeetingWithAttendeesRequest: AWSEncodableShape {
        /// The request containing the attendees to create.
        public let attendees: [CreateAttendeeRequestItem]?
        /// The unique identifier for the client request. Use a different token for different meetings.
        public let clientRequestToken: String
        /// The external meeting ID.
        public let externalMeetingId: String?
        ///  The Region in which to create the meeting. Default: us-east-1 .   Available values: af-south-1 , ap-northeast-1 , ap-northeast-2 , ap-south-1 , ap-southeast-1 , ap-southeast-2 , ca-central-1 , eu-central-1 , eu-north-1 , eu-south-1 , eu-west-1 , eu-west-2 , eu-west-3 , sa-east-1 , us-east-1 , us-east-2 , us-west-1 , us-west-2 .
        public let mediaRegion: String?
        /// Reserved.
        public let meetingHostId: String?
        public let notificationsConfiguration: MeetingNotificationConfiguration?
        /// The tag key-value pairs.
        public let tags: [Tag]?

        public init(attendees: [CreateAttendeeRequestItem]? = nil, clientRequestToken: String = CreateMeetingWithAttendeesRequest.idempotencyToken(), externalMeetingId: String? = nil, mediaRegion: String? = nil, meetingHostId: String? = nil, notificationsConfiguration: MeetingNotificationConfiguration? = nil, tags: [Tag]? = nil) {
            self.attendees = attendees
            self.clientRequestToken = clientRequestToken
            self.externalMeetingId = externalMeetingId
            self.mediaRegion = mediaRegion
            self.meetingHostId = meetingHostId
            self.notificationsConfiguration = notificationsConfiguration
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.attendees?.forEach {
                try $0.validate(name: "\(name).attendees[]")
            }
            try self.validate(self.attendees, name: "attendees", parent: name, max: 10)
            try self.validate(self.attendees, name: "attendees", parent: name, min: 1)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "[-_a-zA-Z0-9]*")
            try self.validate(self.externalMeetingId, name: "externalMeetingId", parent: name, max: 64)
            try self.validate(self.externalMeetingId, name: "externalMeetingId", parent: name, min: 2)
            try self.validate(self.meetingHostId, name: "meetingHostId", parent: name, max: 64)
            try self.validate(self.meetingHostId, name: "meetingHostId", parent: name, min: 2)
            try self.notificationsConfiguration?.validate(name: "\(name).notificationsConfiguration")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
            case clientRequestToken = "ClientRequestToken"
            case externalMeetingId = "ExternalMeetingId"
            case mediaRegion = "MediaRegion"
            case meetingHostId = "MeetingHostId"
            case notificationsConfiguration = "NotificationsConfiguration"
            case tags = "Tags"
        }
    }

    public struct CreateMeetingWithAttendeesResponse: AWSDecodableShape {
        /// The attendee information, including attendees IDs and join tokens.
        public let attendees: [Attendee]?
        /// If the action fails for one or more of the attendees in the request, a list of the attendees is returned, along with error codes and error messages.
        public let errors: [CreateAttendeeError]?
        public let meeting: Meeting?

        public init(attendees: [Attendee]? = nil, errors: [CreateAttendeeError]? = nil, meeting: Meeting? = nil) {
            self.attendees = attendees
            self.errors = errors
            self.meeting = meeting
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
            case errors = "Errors"
            case meeting = "Meeting"
        }
    }

    public struct CreatePhoneNumberOrderRequest: AWSEncodableShape {
        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// The phone number product type.
        public let productType: PhoneNumberProductType

        public init(e164PhoneNumbers: [String], productType: PhoneNumberProductType) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.productType = productType
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
            case productType = "ProductType"
        }
    }

    public struct CreatePhoneNumberOrderResponse: AWSDecodableShape {
        /// The phone number order details.
        public let phoneNumberOrder: PhoneNumberOrder?

        public init(phoneNumberOrder: PhoneNumberOrder? = nil) {
            self.phoneNumberOrder = phoneNumberOrder
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberOrder = "PhoneNumberOrder"
        }
    }

    public struct CreateProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The proxy session capabilities.
        public let capabilities: [Capability]
        /// The number of minutes allowed for the proxy session.
        public let expiryMinutes: Int?
        /// The preference for matching the country or area code of the proxy phone number with that of the first participant.
        public let geoMatchLevel: GeoMatchLevel?
        /// The country and area code for the proxy phone number.
        public let geoMatchParams: GeoMatchParams?
        /// The name of the proxy session.
        public let name: String?
        /// The preference for proxy phone number reuse, or stickiness, between the same participants across sessions.
        public let numberSelectionBehavior: NumberSelectionBehavior?
        /// The participant phone numbers.
        public let participantPhoneNumbers: [String]
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(capabilities: [Capability], expiryMinutes: Int? = nil, geoMatchLevel: GeoMatchLevel? = nil, geoMatchParams: GeoMatchParams? = nil, name: String? = nil, numberSelectionBehavior: NumberSelectionBehavior? = nil, participantPhoneNumbers: [String], voiceConnectorId: String) {
            self.capabilities = capabilities
            self.expiryMinutes = expiryMinutes
            self.geoMatchLevel = geoMatchLevel
            self.geoMatchParams = geoMatchParams
            self.name = name
            self.numberSelectionBehavior = numberSelectionBehavior
            self.participantPhoneNumbers = participantPhoneNumbers
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.expiryMinutes, name: "expiryMinutes", parent: name, min: 1)
            try self.geoMatchParams?.validate(name: "\(name).geoMatchParams")
            try self.validate(self.name, name: "name", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{0,30}$")
            try self.participantPhoneNumbers.forEach {
                try validate($0, name: "participantPhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.participantPhoneNumbers, name: "participantPhoneNumbers", parent: name, max: 2)
            try self.validate(self.participantPhoneNumbers, name: "participantPhoneNumbers", parent: name, min: 2)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "Capabilities"
            case expiryMinutes = "ExpiryMinutes"
            case geoMatchLevel = "GeoMatchLevel"
            case geoMatchParams = "GeoMatchParams"
            case name = "Name"
            case numberSelectionBehavior = "NumberSelectionBehavior"
            case participantPhoneNumbers = "ParticipantPhoneNumbers"
        }
    }

    public struct CreateProxySessionResponse: AWSDecodableShape {
        /// The proxy session details.
        public let proxySession: ProxySession?

        public init(proxySession: ProxySession? = nil) {
            self.proxySession = proxySession
        }

        private enum CodingKeys: String, CodingKey {
            case proxySession = "ProxySession"
        }
    }

    public struct CreateRoomMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "roomId", location: .uri(locationName: "roomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The Amazon Chime member ID (user ID or bot ID).
        public let memberId: String
        /// The role of the member.
        public let role: RoomMembershipRole?
        /// The room ID.
        public let roomId: String

        public init(accountId: String, memberId: String, role: RoomMembershipRole? = nil, roomId: String) {
            self.accountId = accountId
            self.memberId = memberId
            self.role = role
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.memberId, name: "memberId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case memberId = "MemberId"
            case role = "Role"
        }
    }

    public struct CreateRoomMembershipResponse: AWSDecodableShape {
        /// The room membership details.
        public let roomMembership: RoomMembership?

        public init(roomMembership: RoomMembership? = nil) {
            self.roomMembership = roomMembership
        }

        private enum CodingKeys: String, CodingKey {
            case roomMembership = "RoomMembership"
        }
    }

    public struct CreateRoomRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The idempotency token for the request.
        public let clientRequestToken: String?
        /// The room name.
        public let name: String

        public init(accountId: String, clientRequestToken: String? = CreateRoomRequest.idempotencyToken(), name: String) {
            self.accountId = accountId
            self.clientRequestToken = clientRequestToken
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "[-_a-zA-Z0-9]*")
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case name = "Name"
        }
    }

    public struct CreateRoomResponse: AWSDecodableShape {
        /// The room details.
        public let room: Room?

        public init(room: Room? = nil) {
            self.room = room
        }

        private enum CodingKeys: String, CodingKey {
            case room = "Room"
        }
    }

    public struct CreateSipMediaApplicationCallRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri(locationName: "sipMediaApplicationId"))
        ]

        /// The phone number that a user calls from.
        public let fromPhoneNumber: String
        /// The ID of the SIP media application.
        public let sipMediaApplicationId: String
        /// The phone number that the user dials in order to connect to a meeting.
        public let toPhoneNumber: String

        public init(fromPhoneNumber: String, sipMediaApplicationId: String, toPhoneNumber: String) {
            self.fromPhoneNumber = fromPhoneNumber
            self.sipMediaApplicationId = sipMediaApplicationId
            self.toPhoneNumber = toPhoneNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.fromPhoneNumber, name: "fromPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.toPhoneNumber, name: "toPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case fromPhoneNumber = "FromPhoneNumber"
            case toPhoneNumber = "ToPhoneNumber"
        }
    }

    public struct CreateSipMediaApplicationCallResponse: AWSDecodableShape {
        /// The actual call.
        public let sipMediaApplicationCall: SipMediaApplicationCall?

        public init(sipMediaApplicationCall: SipMediaApplicationCall? = nil) {
            self.sipMediaApplicationCall = sipMediaApplicationCall
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationCall = "SipMediaApplicationCall"
        }
    }

    public struct CreateSipMediaApplicationRequest: AWSEncodableShape {
        /// The AWS Region assigned to the SIP media application.
        public let awsRegion: String
        /// List of endpoints (Lambda Amazon Resource Names) specified for the SIP media application. Currently, only one endpoint is supported.
        public let endpoints: [SipMediaApplicationEndpoint]
        /// The SIP media application name.
        public let name: String

        public init(awsRegion: String, endpoints: [SipMediaApplicationEndpoint], name: String) {
            self.awsRegion = awsRegion
            self.endpoints = endpoints
            self.name = name
        }

        public func validate(name: String) throws {
            try self.endpoints.forEach {
                try $0.validate(name: "\(name).endpoints[]")
            }
            try self.validate(self.endpoints, name: "endpoints", parent: name, max: 1)
            try self.validate(self.endpoints, name: "endpoints", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case endpoints = "Endpoints"
            case name = "Name"
        }
    }

    public struct CreateSipMediaApplicationResponse: AWSDecodableShape {
        /// The SIP media application details.
        public let sipMediaApplication: SipMediaApplication?

        public init(sipMediaApplication: SipMediaApplication? = nil) {
            self.sipMediaApplication = sipMediaApplication
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplication = "SipMediaApplication"
        }
    }

    public struct CreateSipRuleRequest: AWSEncodableShape {
        /// Enables or disables a rule. You must disable rules before you can delete them.
        public let disabled: Bool?
        /// The name of the SIP rule.
        public let name: String
        /// List of SIP media applications with priority and AWS Region. Only one SIP application per AWS Region can be used.
        public let targetApplications: [SipRuleTargetApplication]
        /// The type of trigger assigned to the SIP rule in TriggerValue, currently RequestUriHostname or ToPhoneNumber.
        public let triggerType: SipRuleTriggerType
        /// If TriggerType is RequestUriHostname, the value can be the outbound host name of an Amazon Chime Voice Connector. If TriggerType is ToPhoneNumber, the value can be a customer-owned phone number in the E164 format. The SipMediaApplication specified in the SipRule is triggered if the request URI in an incoming SIP request matches the RequestUriHostname, or if the To header in the incoming SIP request matches the ToPhoneNumber value.
        public let triggerValue: String

        public init(disabled: Bool? = nil, name: String, targetApplications: [SipRuleTargetApplication], triggerType: SipRuleTriggerType, triggerValue: String) {
            self.disabled = disabled
            self.name = name
            self.targetApplications = targetApplications
            self.triggerType = triggerType
            self.triggerValue = triggerValue
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.targetApplications.forEach {
                try $0.validate(name: "\(name).targetApplications[]")
            }
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, max: 25)
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, min: 1)
            try self.validate(self.triggerValue, name: "triggerValue", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
            case name = "Name"
            case targetApplications = "TargetApplications"
            case triggerType = "TriggerType"
            case triggerValue = "TriggerValue"
        }
    }

    public struct CreateSipRuleResponse: AWSDecodableShape {
        /// Returns the SIP rule information, including the rule ID, triggers, and target applications.
        public let sipRule: SipRule?

        public init(sipRule: SipRule? = nil) {
            self.sipRule = sipRule
        }

        private enum CodingKeys: String, CodingKey {
            case sipRule = "SipRule"
        }
    }

    public struct CreateUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user's email address.
        public let email: String?
        /// The user name.
        public let username: String?
        /// The user type.
        public let userType: UserType?

        public init(accountId: String, email: String? = nil, username: String? = nil, userType: UserType? = nil) {
            self.accountId = accountId
            self.email = email
            self.username = username
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.email, name: "email", parent: name, pattern: ".+@.+\\..+")
        }

        private enum CodingKeys: String, CodingKey {
            case email = "Email"
            case username = "Username"
            case userType = "UserType"
        }
    }

    public struct CreateUserResponse: AWSDecodableShape {
        public let user: User?

        public init(user: User? = nil) {
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case user = "User"
        }
    }

    public struct CreateVoiceConnectorGroupRequest: AWSEncodableShape {
        /// The name of the Amazon Chime Voice Connector group.
        public let name: String
        /// The Amazon Chime Voice Connectors to route inbound calls to.
        public let voiceConnectorItems: [VoiceConnectorItem]?

        public init(name: String, voiceConnectorItems: [VoiceConnectorItem]? = nil) {
            self.name = name
            self.voiceConnectorItems = voiceConnectorItems
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.voiceConnectorItems?.forEach {
                try $0.validate(name: "\(name).voiceConnectorItems[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case voiceConnectorItems = "VoiceConnectorItems"
        }
    }

    public struct CreateVoiceConnectorGroupResponse: AWSDecodableShape {
        /// The Amazon Chime Voice Connector group details.
        public let voiceConnectorGroup: VoiceConnectorGroup?

        public init(voiceConnectorGroup: VoiceConnectorGroup? = nil) {
            self.voiceConnectorGroup = voiceConnectorGroup
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorGroup = "VoiceConnectorGroup"
        }
    }

    public struct CreateVoiceConnectorRequest: AWSEncodableShape {
        ///  The AWS Region in which the Amazon Chime Voice Connector is created. Default value: us-east-1 .
        public let awsRegion: VoiceConnectorAwsRegion?
        /// The name of the Amazon Chime Voice Connector.
        public let name: String
        /// When enabled, requires encryption for the Amazon Chime Voice Connector.
        public let requireEncryption: Bool

        public init(awsRegion: VoiceConnectorAwsRegion? = nil, name: String, requireEncryption: Bool) {
            self.awsRegion = awsRegion
            self.name = name
            self.requireEncryption = requireEncryption
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case name = "Name"
            case requireEncryption = "RequireEncryption"
        }
    }

    public struct CreateVoiceConnectorResponse: AWSDecodableShape {
        /// The Amazon Chime Voice Connector details.
        public let voiceConnector: VoiceConnector?

        public init(voiceConnector: VoiceConnector? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct Credential: AWSEncodableShape {
        /// The RFC2617 compliant password associated with the SIP credentials, in US-ASCII format.
        public let password: String?
        /// The RFC2617 compliant user name associated with the SIP credentials, in US-ASCII format.
        public let username: String?

        public init(password: String? = nil, username: String? = nil) {
            self.password = password
            self.username = username
        }

        private enum CodingKeys: String, CodingKey {
            case password = "Password"
            case username = "Username"
        }
    }

    public struct DNISEmergencyCallingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The country from which emergency calls are allowed, in ISO 3166-1 alpha-2 format.
        public let callingCountry: String
        /// The DNIS phone number to route emergency calls to, in E.164 format.
        public let emergencyPhoneNumber: String
        /// The DNIS phone number to route test emergency calls to, in E.164 format.
        public let testPhoneNumber: String?

        public init(callingCountry: String, emergencyPhoneNumber: String, testPhoneNumber: String? = nil) {
            self.callingCountry = callingCountry
            self.emergencyPhoneNumber = emergencyPhoneNumber
            self.testPhoneNumber = testPhoneNumber
        }

        public func validate(name: String) throws {
            try self.validate(self.callingCountry, name: "callingCountry", parent: name, pattern: "[A-Z]{2}")
            try self.validate(self.emergencyPhoneNumber, name: "emergencyPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.validate(self.testPhoneNumber, name: "testPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingCountry = "CallingCountry"
            case emergencyPhoneNumber = "EmergencyPhoneNumber"
            case testPhoneNumber = "TestPhoneNumber"
        }
    }

    public struct DeleteAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String

        public init(accountId: String) {
            self.accountId = accountId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteAppInstanceAdminRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceAdminArn", location: .uri(locationName: "appInstanceAdminArn")),
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the AppInstance's administrator.
        public let appInstanceAdminArn: String
        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceAdminArn: String, appInstanceArn: String) {
            self.appInstanceAdminArn = appInstanceAdminArn
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, max: 1600)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, min: 5)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAppInstanceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAppInstanceStreamingConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the streaming configurations being deleted.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .uri(locationName: "appInstanceUserArn"))
        ]

        /// The ARN of the user request being deleted.
        public let appInstanceUserArn: String

        public init(appInstanceUserArn: String) {
            self.appInstanceUserArn = appInstanceUserArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri(locationName: "attendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(attendeeId: String, meetingId: String) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelBanRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "memberArn", location: .uri(locationName: "memberArn"))
        ]

        /// The ARN of the channel from which the AppInstanceUser was banned.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the AppInstanceUser that you want to reinstate.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "memberArn", location: .uri(locationName: "memberArn"))
        ]

        /// The ARN of the channel from which you want to remove the user.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member that you're removing from the channel.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "messageId", location: .uri(locationName: "messageId"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ID of the message being deleted.
        public let messageId: String

        public init(channelArn: String, chimeBearer: String? = nil, messageId: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.messageId = messageId
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.messageId, name: "messageId", parent: name, max: 128)
            try self.validate(self.messageId, name: "messageId", parent: name, min: 1)
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "[-_a-zA-Z0-9]*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelModeratorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "channelModeratorArn", location: .uri(locationName: "channelModeratorArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The ARN of the moderator being deleted.
        public let channelModeratorArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, channelModeratorArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.channelModeratorArn = channelModeratorArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, max: 1600)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, min: 5)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel being deleted.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteEventsConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "botId", location: .uri(locationName: "botId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String

        public init(accountId: String, botId: String) {
            self.accountId = accountId
            self.botId = botId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.botId, name: "botId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteMeetingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(meetingId: String) {
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeletePhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri(locationName: "phoneNumberId"))
        ]

        /// The phone number ID.
        public let phoneNumberId: String

        public init(phoneNumberId: String) {
            self.phoneNumberId = phoneNumberId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "proxySessionId", location: .uri(locationName: "proxySessionId")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The proxy session ID.
        public let proxySessionId: String
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(proxySessionId: String, voiceConnectorId: String) {
            self.proxySessionId = proxySessionId
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, max: 128)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteRoomMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "memberId", location: .uri(locationName: "memberId")),
            AWSMemberEncoding(label: "roomId", location: .uri(locationName: "roomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The member ID (user ID or bot ID).
        public let memberId: String
        /// The room ID.
        public let roomId: String

        public init(accountId: String, memberId: String, roomId: String) {
            self.accountId = accountId
            self.memberId = memberId
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.memberId, name: "memberId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteRoomRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "roomId", location: .uri(locationName: "roomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The chat room ID.
        public let roomId: String

        public init(accountId: String, roomId: String) {
            self.accountId = accountId
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSipMediaApplicationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri(locationName: "sipMediaApplicationId"))
        ]

        /// The SIP media application ID.
        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteSipRuleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipRuleId", location: .uri(locationName: "sipRuleId"))
        ]

        /// The SIP rule ID.
        public let sipRuleId: String

        public init(sipRuleId: String) {
            self.sipRuleId = sipRuleId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipRuleId, name: "sipRuleId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorEmergencyCallingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri(locationName: "voiceConnectorGroupId"))
        ]

        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String

        public init(voiceConnectorGroupId: String) {
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorOriginationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorProxyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorStreamingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVoiceConnectorTerminationCredentialsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The RFC2617 compliant username associated with the SIP credentials, in US-ASCII format.
        public let usernames: [String]
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(usernames: [String], voiceConnectorId: String) {
            self.usernames = usernames
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case usernames = "Usernames"
        }
    }

    public struct DeleteVoiceConnectorTerminationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeAppInstanceAdminRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceAdminArn", location: .uri(locationName: "appInstanceAdminArn")),
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the AppInstanceAdmin.
        public let appInstanceAdminArn: String
        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceAdminArn: String, appInstanceArn: String) {
            self.appInstanceAdminArn = appInstanceAdminArn
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, max: 1600)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, min: 5)
            try self.validate(self.appInstanceAdminArn, name: "appInstanceAdminArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeAppInstanceAdminResponse: AWSDecodableShape {
        /// The ARN and name of the AppInstanceUser, the ARN of the AppInstance, and the created and last-updated timestamps. All timestamps use epoch milliseconds.
        public let appInstanceAdmin: AppInstanceAdmin?

        public init(appInstanceAdmin: AppInstanceAdmin? = nil) {
            self.appInstanceAdmin = appInstanceAdmin
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceAdmin = "AppInstanceAdmin"
        }
    }

    public struct DescribeAppInstanceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeAppInstanceResponse: AWSDecodableShape {
        /// The ARN, metadata, created and last-updated timestamps, and the name of the AppInstance. All timestamps use epoch milliseconds.
        public let appInstance: AppInstance?

        public init(appInstance: AppInstance? = nil) {
            self.appInstance = appInstance
        }

        private enum CodingKeys: String, CodingKey {
            case appInstance = "AppInstance"
        }
    }

    public struct DescribeAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .uri(locationName: "appInstanceUserArn"))
        ]

        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String

        public init(appInstanceUserArn: String) {
            self.appInstanceUserArn = appInstanceUserArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeAppInstanceUserResponse: AWSDecodableShape {
        /// The name of the AppInstanceUser.
        public let appInstanceUser: AppInstanceUser?

        public init(appInstanceUser: AppInstanceUser? = nil) {
            self.appInstanceUser = appInstanceUser
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUser = "AppInstanceUser"
        }
    }

    public struct DescribeChannelBanRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "memberArn", location: .uri(locationName: "memberArn"))
        ]

        /// The ARN of the channel from which the user is banned.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member being banned.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelBanResponse: AWSDecodableShape {
        /// The the details of the ban.
        public let channelBan: ChannelBan?

        public init(channelBan: ChannelBan? = nil) {
            self.channelBan = channelBan
        }

        private enum CodingKeys: String, CodingKey {
            case channelBan = "ChannelBan"
        }
    }

    public struct DescribeChannelMembershipForAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .querystring(locationName: "app-instance-user-arn")),
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the user in a channel.
        public let appInstanceUserArn: String
        /// The ARN of the channel to which the user belongs.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(appInstanceUserArn: String, channelArn: String, chimeBearer: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelMembershipForAppInstanceUserResponse: AWSDecodableShape {
        /// The channel to which a user belongs.
        public let channelMembership: ChannelMembershipForAppInstanceUserSummary?

        public init(channelMembership: ChannelMembershipForAppInstanceUserSummary? = nil) {
            self.channelMembership = channelMembership
        }

        private enum CodingKeys: String, CodingKey {
            case channelMembership = "ChannelMembership"
        }
    }

    public struct DescribeChannelMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "memberArn", location: .uri(locationName: "memberArn"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ARN of the member.
        public let memberArn: String

        public init(channelArn: String, chimeBearer: String? = nil, memberArn: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.memberArn = memberArn
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.memberArn, name: "memberArn", parent: name, max: 1600)
            try self.validate(self.memberArn, name: "memberArn", parent: name, min: 5)
            try self.validate(self.memberArn, name: "memberArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelMembershipResponse: AWSDecodableShape {
        /// The details of the membership.
        public let channelMembership: ChannelMembership?

        public init(channelMembership: ChannelMembership? = nil) {
            self.channelMembership = channelMembership
        }

        private enum CodingKeys: String, CodingKey {
            case channelMembership = "ChannelMembership"
        }
    }

    public struct DescribeChannelModeratedByAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .querystring(locationName: "app-instance-user-arn")),
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the AppInstanceUser in the moderated channel.
        public let appInstanceUserArn: String
        /// The ARN of the moderated channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(appInstanceUserArn: String, channelArn: String, chimeBearer: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelModeratedByAppInstanceUserResponse: AWSDecodableShape {
        /// The moderated channel.
        public let channel: ChannelModeratedByAppInstanceUserSummary?

        public init(channel: ChannelModeratedByAppInstanceUserSummary? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel = "Channel"
        }
    }

    public struct DescribeChannelModeratorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "channelModeratorArn", location: .uri(locationName: "channelModeratorArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The ARN of the channel moderator.
        public let channelModeratorArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, channelModeratorArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.channelModeratorArn = channelModeratorArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, max: 1600)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, min: 5)
            try self.validate(self.channelModeratorArn, name: "channelModeratorArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelModeratorResponse: AWSDecodableShape {
        /// The details of the channel moderator.
        public let channelModerator: ChannelModerator?

        public init(channelModerator: ChannelModerator? = nil) {
            self.channelModerator = channelModerator
        }

        private enum CodingKeys: String, CodingKey {
            case channelModerator = "ChannelModerator"
        }
    }

    public struct DescribeChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DescribeChannelResponse: AWSDecodableShape {
        /// The channel details.
        public let channel: Channel?

        public init(channel: Channel? = nil) {
            self.channel = channel
        }

        private enum CodingKeys: String, CodingKey {
            case channel = "Channel"
        }
    }

    public struct DisassociatePhoneNumberFromUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "userId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DisassociatePhoneNumberFromUserResponse: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri(locationName: "voiceConnectorGroupId"))
        ]

        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String

        public init(e164PhoneNumbers: [String], voiceConnectorGroupId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
        }
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorGroupResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(e164PhoneNumbers: [String], voiceConnectorId: String) {
            self.e164PhoneNumbers = e164PhoneNumbers
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.e164PhoneNumbers.forEach {
                try validate($0, name: "e164PhoneNumbers[]", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            }
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
        }
    }

    public struct DisassociatePhoneNumbersFromVoiceConnectorResponse: AWSDecodableShape {
        /// If the action fails for one or more of the phone numbers in the request, a list of the phone numbers is returned, along with error codes and error messages.
        public let phoneNumberErrors: [PhoneNumberError]?

        public init(phoneNumberErrors: [PhoneNumberError]? = nil) {
            self.phoneNumberErrors = phoneNumberErrors
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberErrors = "PhoneNumberErrors"
        }
    }

    public struct DisassociateSigninDelegateGroupsFromAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The sign-in delegate group names.
        public let groupNames: [String]

        public init(accountId: String, groupNames: [String]) {
            self.accountId = accountId
            self.groupNames = groupNames
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.groupNames, name: "groupNames", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case groupNames = "GroupNames"
        }
    }

    public struct DisassociateSigninDelegateGroupsFromAccountResponse: AWSDecodableShape {
        public init() {}
    }

    public struct EmergencyCallingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The Dialed Number Identification Service (DNIS) emergency calling configuration details.
        public let dnis: [DNISEmergencyCallingConfiguration]?

        public init(dnis: [DNISEmergencyCallingConfiguration]? = nil) {
            self.dnis = dnis
        }

        public func validate(name: String) throws {
            try self.dnis?.forEach {
                try $0.validate(name: "\(name).dnis[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case dnis = "DNIS"
        }
    }

    public struct EventsConfiguration: AWSDecodableShape {
        /// The bot ID.
        public let botId: String?
        /// Lambda function ARN that allows a bot to receive outgoing events.
        public let lambdaFunctionArn: String?
        /// HTTPS endpoint that allows a bot to receive outgoing events.
        public let outboundEventsHTTPSEndpoint: String?

        public init(botId: String? = nil, lambdaFunctionArn: String? = nil, outboundEventsHTTPSEndpoint: String? = nil) {
            self.botId = botId
            self.lambdaFunctionArn = lambdaFunctionArn
            self.outboundEventsHTTPSEndpoint = outboundEventsHTTPSEndpoint
        }

        private enum CodingKeys: String, CodingKey {
            case botId = "BotId"
            case lambdaFunctionArn = "LambdaFunctionArn"
            case outboundEventsHTTPSEndpoint = "OutboundEventsHTTPSEndpoint"
        }
    }

    public struct GeoMatchParams: AWSEncodableShape & AWSDecodableShape {
        /// The area code.
        public let areaCode: String
        /// The country.
        public let country: String

        public init(areaCode: String, country: String) {
            self.areaCode = areaCode
            self.country = country
        }

        public func validate(name: String) throws {
            try self.validate(self.areaCode, name: "areaCode", parent: name, pattern: "^$|^[0-9]{3,3}$")
            try self.validate(self.country, name: "country", parent: name, pattern: "^$|^[A-Z]{2,2}$")
        }

        private enum CodingKeys: String, CodingKey {
            case areaCode = "AreaCode"
            case country = "Country"
        }
    }

    public struct GetAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String

        public init(accountId: String) {
            self.accountId = accountId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAccountResponse: AWSDecodableShape {
        /// The Amazon Chime account details.
        public let account: Account?

        public init(account: Account? = nil) {
            self.account = account
        }

        private enum CodingKeys: String, CodingKey {
            case account = "Account"
        }
    }

    public struct GetAccountSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String

        public init(accountId: String) {
            self.accountId = accountId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAccountSettingsResponse: AWSDecodableShape {
        /// The Amazon Chime account settings.
        public let accountSettings: AccountSettings?

        public init(accountSettings: AccountSettings? = nil) {
            self.accountSettings = accountSettings
        }

        private enum CodingKeys: String, CodingKey {
            case accountSettings = "AccountSettings"
        }
    }

    public struct GetAppInstanceRetentionSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAppInstanceRetentionSettingsResponse: AWSDecodableShape {
        /// The retention settings for the AppInstance.
        public let appInstanceRetentionSettings: AppInstanceRetentionSettings?
        /// The timestamp representing the time at which the specified items are retained, in Epoch Seconds.
        public let initiateDeletionTimestamp: Date?

        public init(appInstanceRetentionSettings: AppInstanceRetentionSettings? = nil, initiateDeletionTimestamp: Date? = nil) {
            self.appInstanceRetentionSettings = appInstanceRetentionSettings
            self.initiateDeletionTimestamp = initiateDeletionTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceRetentionSettings = "AppInstanceRetentionSettings"
            case initiateDeletionTimestamp = "InitiateDeletionTimestamp"
        }
    }

    public struct GetAppInstanceStreamingConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String

        public init(appInstanceArn: String) {
            self.appInstanceArn = appInstanceArn
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAppInstanceStreamingConfigurationsResponse: AWSDecodableShape {
        /// The streaming settings.
        public let appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]?

        public init(appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]? = nil) {
            self.appInstanceStreamingConfigurations = appInstanceStreamingConfigurations
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceStreamingConfigurations = "AppInstanceStreamingConfigurations"
        }
    }

    public struct GetAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri(locationName: "attendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(attendeeId: String, meetingId: String) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAttendeeResponse: AWSDecodableShape {
        /// The Amazon Chime SDK attendee information.
        public let attendee: Attendee?

        public init(attendee: Attendee? = nil) {
            self.attendee = attendee
        }

        private enum CodingKeys: String, CodingKey {
            case attendee = "Attendee"
        }
    }

    public struct GetBotRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "botId", location: .uri(locationName: "botId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String

        public init(accountId: String, botId: String) {
            self.accountId = accountId
            self.botId = botId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.botId, name: "botId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetBotResponse: AWSDecodableShape {
        /// The chat bot details.
        public let bot: Bot?

        public init(bot: Bot? = nil) {
            self.bot = bot
        }

        private enum CodingKeys: String, CodingKey {
            case bot = "Bot"
        }
    }

    public struct GetChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "messageId", location: .uri(locationName: "messageId"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ID of the message.
        public let messageId: String

        public init(channelArn: String, chimeBearer: String? = nil, messageId: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.messageId = messageId
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.messageId, name: "messageId", parent: name, max: 128)
            try self.validate(self.messageId, name: "messageId", parent: name, min: 1)
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "[-_a-zA-Z0-9]*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetChannelMessageResponse: AWSDecodableShape {
        /// The details of and content in the message.
        public let channelMessage: ChannelMessage?

        public init(channelMessage: ChannelMessage? = nil) {
            self.channelMessage = channelMessage
        }

        private enum CodingKeys: String, CodingKey {
            case channelMessage = "ChannelMessage"
        }
    }

    public struct GetEventsConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "botId", location: .uri(locationName: "botId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String

        public init(accountId: String, botId: String) {
            self.accountId = accountId
            self.botId = botId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.botId, name: "botId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetEventsConfigurationResponse: AWSDecodableShape {
        /// The events configuration details.
        public let eventsConfiguration: EventsConfiguration?

        public init(eventsConfiguration: EventsConfiguration? = nil) {
            self.eventsConfiguration = eventsConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case eventsConfiguration = "EventsConfiguration"
        }
    }

    public struct GetGlobalSettingsResponse: AWSDecodableShape {
        /// The Amazon Chime Business Calling settings.
        public let businessCalling: BusinessCallingSettings?
        /// The Amazon Chime Voice Connector settings.
        public let voiceConnector: VoiceConnectorSettings?

        public init(businessCalling: BusinessCallingSettings? = nil, voiceConnector: VoiceConnectorSettings? = nil) {
            self.businessCalling = businessCalling
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case businessCalling = "BusinessCalling"
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct GetMeetingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(meetingId: String) {
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetMeetingResponse: AWSDecodableShape {
        /// The Amazon Chime SDK meeting information.
        public let meeting: Meeting?

        public init(meeting: Meeting? = nil) {
            self.meeting = meeting
        }

        private enum CodingKeys: String, CodingKey {
            case meeting = "Meeting"
        }
    }

    public struct GetMessagingSessionEndpointRequest: AWSEncodableShape {
        public init() {}
    }

    public struct GetMessagingSessionEndpointResponse: AWSDecodableShape {
        /// The endpoint returned in the response.
        public let endpoint: MessagingSessionEndpoint?

        public init(endpoint: MessagingSessionEndpoint? = nil) {
            self.endpoint = endpoint
        }

        private enum CodingKeys: String, CodingKey {
            case endpoint = "Endpoint"
        }
    }

    public struct GetPhoneNumberOrderRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberOrderId", location: .uri(locationName: "phoneNumberOrderId"))
        ]

        /// The ID for the phone number order.
        public let phoneNumberOrderId: String

        public init(phoneNumberOrderId: String) {
            self.phoneNumberOrderId = phoneNumberOrderId
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberOrderId, name: "phoneNumberOrderId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPhoneNumberOrderResponse: AWSDecodableShape {
        /// The phone number order details.
        public let phoneNumberOrder: PhoneNumberOrder?

        public init(phoneNumberOrder: PhoneNumberOrder? = nil) {
            self.phoneNumberOrder = phoneNumberOrder
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumberOrder = "PhoneNumberOrder"
        }
    }

    public struct GetPhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri(locationName: "phoneNumberId"))
        ]

        /// The phone number ID.
        public let phoneNumberId: String

        public init(phoneNumberId: String) {
            self.phoneNumberId = phoneNumberId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetPhoneNumberResponse: AWSDecodableShape {
        /// The phone number details.
        public let phoneNumber: PhoneNumber?

        public init(phoneNumber: PhoneNumber? = nil) {
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct GetPhoneNumberSettingsResponse: AWSDecodableShape {
        /// The default outbound calling name for the account.
        public let callingName: String?
        /// The updated outbound calling name timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var callingNameUpdatedTimestamp: Date?

        public init(callingName: String? = nil, callingNameUpdatedTimestamp: Date? = nil) {
            self.callingName = callingName
            self.callingNameUpdatedTimestamp = callingNameUpdatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
            case callingNameUpdatedTimestamp = "CallingNameUpdatedTimestamp"
        }
    }

    public struct GetProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "proxySessionId", location: .uri(locationName: "proxySessionId")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The proxy session ID.
        public let proxySessionId: String
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(proxySessionId: String, voiceConnectorId: String) {
            self.proxySessionId = proxySessionId
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, max: 128)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetProxySessionResponse: AWSDecodableShape {
        /// The proxy session details.
        public let proxySession: ProxySession?

        public init(proxySession: ProxySession? = nil) {
            self.proxySession = proxySession
        }

        private enum CodingKeys: String, CodingKey {
            case proxySession = "ProxySession"
        }
    }

    public struct GetRetentionSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String

        public init(accountId: String) {
            self.accountId = accountId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRetentionSettingsResponse: AWSDecodableShape {
        /// The timestamp representing the time at which the specified items are permanently deleted, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var initiateDeletionTimestamp: Date?
        /// The retention settings.
        public let retentionSettings: RetentionSettings?

        public init(initiateDeletionTimestamp: Date? = nil, retentionSettings: RetentionSettings? = nil) {
            self.initiateDeletionTimestamp = initiateDeletionTimestamp
            self.retentionSettings = retentionSettings
        }

        private enum CodingKeys: String, CodingKey {
            case initiateDeletionTimestamp = "InitiateDeletionTimestamp"
            case retentionSettings = "RetentionSettings"
        }
    }

    public struct GetRoomRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "roomId", location: .uri(locationName: "roomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The room ID.
        public let roomId: String

        public init(accountId: String, roomId: String) {
            self.accountId = accountId
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRoomResponse: AWSDecodableShape {
        /// The room details.
        public let room: Room?

        public init(room: Room? = nil) {
            self.room = room
        }

        private enum CodingKeys: String, CodingKey {
            case room = "Room"
        }
    }

    public struct GetSipMediaApplicationLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri(locationName: "sipMediaApplicationId"))
        ]

        /// The SIP media application ID.
        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipMediaApplicationLoggingConfigurationResponse: AWSDecodableShape {
        /// The actual logging configuration.
        public let sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration?

        public init(sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration? = nil) {
            self.sipMediaApplicationLoggingConfiguration = sipMediaApplicationLoggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationLoggingConfiguration = "SipMediaApplicationLoggingConfiguration"
        }
    }

    public struct GetSipMediaApplicationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri(locationName: "sipMediaApplicationId"))
        ]

        /// The SIP media application ID.
        public let sipMediaApplicationId: String

        public init(sipMediaApplicationId: String) {
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipMediaApplicationResponse: AWSDecodableShape {
        /// The SIP media application details.
        public let sipMediaApplication: SipMediaApplication?

        public init(sipMediaApplication: SipMediaApplication? = nil) {
            self.sipMediaApplication = sipMediaApplication
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplication = "SipMediaApplication"
        }
    }

    public struct GetSipRuleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipRuleId", location: .uri(locationName: "sipRuleId"))
        ]

        /// The SIP rule ID.
        public let sipRuleId: String

        public init(sipRuleId: String) {
            self.sipRuleId = sipRuleId
        }

        public func validate(name: String) throws {
            try self.validate(self.sipRuleId, name: "sipRuleId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetSipRuleResponse: AWSDecodableShape {
        /// The SIP rule details.
        public let sipRule: SipRule?

        public init(sipRule: SipRule? = nil) {
            self.sipRule = sipRule
        }

        private enum CodingKeys: String, CodingKey {
            case sipRule = "SipRule"
        }
    }

    public struct GetUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "userId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.userId, name: "userId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetUserResponse: AWSDecodableShape {
        /// The user details.
        public let user: User?

        public init(user: User? = nil) {
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case user = "User"
        }
    }

    public struct GetUserSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "userId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetUserSettingsResponse: AWSDecodableShape {
        /// The user settings.
        public let userSettings: UserSettings?

        public init(userSettings: UserSettings? = nil) {
            self.userSettings = userSettings
        }

        private enum CodingKeys: String, CodingKey {
            case userSettings = "UserSettings"
        }
    }

    public struct GetVoiceConnectorEmergencyCallingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorEmergencyCallingConfigurationResponse: AWSDecodableShape {
        /// The emergency calling configuration details.
        public let emergencyCallingConfiguration: EmergencyCallingConfiguration?

        public init(emergencyCallingConfiguration: EmergencyCallingConfiguration? = nil) {
            self.emergencyCallingConfiguration = emergencyCallingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case emergencyCallingConfiguration = "EmergencyCallingConfiguration"
        }
    }

    public struct GetVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri(locationName: "voiceConnectorGroupId"))
        ]

        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String

        public init(voiceConnectorGroupId: String) {
            self.voiceConnectorGroupId = voiceConnectorGroupId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorGroupResponse: AWSDecodableShape {
        /// The Amazon Chime Voice Connector group details.
        public let voiceConnectorGroup: VoiceConnectorGroup?

        public init(voiceConnectorGroup: VoiceConnectorGroup? = nil) {
            self.voiceConnectorGroup = voiceConnectorGroup
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorGroup = "VoiceConnectorGroup"
        }
    }

    public struct GetVoiceConnectorLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorLoggingConfigurationResponse: AWSDecodableShape {
        /// The logging configuration details.
        public let loggingConfiguration: LoggingConfiguration?

        public init(loggingConfiguration: LoggingConfiguration? = nil) {
            self.loggingConfiguration = loggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case loggingConfiguration = "LoggingConfiguration"
        }
    }

    public struct GetVoiceConnectorOriginationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorOriginationResponse: AWSDecodableShape {
        /// The origination setting details.
        public let origination: Origination?

        public init(origination: Origination? = nil) {
            self.origination = origination
        }

        private enum CodingKeys: String, CodingKey {
            case origination = "Origination"
        }
    }

    public struct GetVoiceConnectorProxyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorProxyResponse: AWSDecodableShape {
        /// The proxy configuration details.
        public let proxy: Proxy?

        public init(proxy: Proxy? = nil) {
            self.proxy = proxy
        }

        private enum CodingKeys: String, CodingKey {
            case proxy = "Proxy"
        }
    }

    public struct GetVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorResponse: AWSDecodableShape {
        /// The Amazon Chime Voice Connector details.
        public let voiceConnector: VoiceConnector?

        public init(voiceConnector: VoiceConnector? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct GetVoiceConnectorStreamingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorStreamingConfigurationResponse: AWSDecodableShape {
        /// The streaming configuration details.
        public let streamingConfiguration: StreamingConfiguration?

        public init(streamingConfiguration: StreamingConfiguration? = nil) {
            self.streamingConfiguration = streamingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case streamingConfiguration = "StreamingConfiguration"
        }
    }

    public struct GetVoiceConnectorTerminationHealthRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorTerminationHealthResponse: AWSDecodableShape {
        /// The termination health details.
        public let terminationHealth: TerminationHealth?

        public init(terminationHealth: TerminationHealth? = nil) {
            self.terminationHealth = terminationHealth
        }

        private enum CodingKeys: String, CodingKey {
            case terminationHealth = "TerminationHealth"
        }
    }

    public struct GetVoiceConnectorTerminationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVoiceConnectorTerminationResponse: AWSDecodableShape {
        /// The termination setting details.
        public let termination: Termination?

        public init(termination: Termination? = nil) {
            self.termination = termination
        }

        private enum CodingKeys: String, CodingKey {
            case termination = "Termination"
        }
    }

    public struct Identity: AWSDecodableShape {
        /// The ARN in an Identity.
        public let arn: String?
        /// The name in an Identity.
        public let name: String?

        public init(arn: String? = nil, name: String? = nil) {
            self.arn = arn
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case arn = "Arn"
            case name = "Name"
        }
    }

    public struct Invite: AWSDecodableShape {
        /// The email address to which the invite is sent.
        public let emailAddress: String?
        /// The status of the invite email.
        public let emailStatus: EmailStatus?
        /// The invite ID.
        public let inviteId: String?
        /// The status of the invite.
        public let status: InviteStatus?

        public init(emailAddress: String? = nil, emailStatus: EmailStatus? = nil, inviteId: String? = nil, status: InviteStatus? = nil) {
            self.emailAddress = emailAddress
            self.emailStatus = emailStatus
            self.inviteId = inviteId
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case emailAddress = "EmailAddress"
            case emailStatus = "EmailStatus"
            case inviteId = "InviteId"
            case status = "Status"
        }
    }

    public struct InviteUsersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user email addresses to which to send the email invitation.
        public let userEmailList: [String]
        /// The user type.
        public let userType: UserType?

        public init(accountId: String, userEmailList: [String], userType: UserType? = nil) {
            self.accountId = accountId
            self.userEmailList = userEmailList
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.userEmailList.forEach {
                try validate($0, name: "userEmailList[]", parent: name, pattern: ".+@.+\\..+")
            }
            try self.validate(self.userEmailList, name: "userEmailList", parent: name, max: 50)
        }

        private enum CodingKeys: String, CodingKey {
            case userEmailList = "UserEmailList"
            case userType = "UserType"
        }
    }

    public struct InviteUsersResponse: AWSDecodableShape {
        /// The email invitation details.
        public let invites: [Invite]?

        public init(invites: [Invite]? = nil) {
            self.invites = invites
        }

        private enum CodingKeys: String, CodingKey {
            case invites = "Invites"
        }
    }

    public struct ListAccountsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "name", location: .querystring(locationName: "name")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "userEmail", location: .querystring(locationName: "user-email"))
        ]

        /// The maximum number of results to return in a single call. Defaults to 100.
        public let maxResults: Int?
        /// Amazon Chime account name prefix with which to filter results.
        public let name: String?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// User email address with which to filter results.
        public let userEmail: String?

        public init(maxResults: Int? = nil, name: String? = nil, nextToken: String? = nil, userEmail: String? = nil) {
            self.maxResults = maxResults
            self.name = name
            self.nextToken = nextToken
            self.userEmail = userEmail
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 200)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: ".*\\S.*")
            try self.validate(self.userEmail, name: "userEmail", parent: name, pattern: ".+@.+\\..+")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAccountsResponse: AWSDecodableShape {
        /// List of Amazon Chime accounts and account details.
        public let accounts: [Account]?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(accounts: [Account]? = nil, nextToken: String? = nil) {
            self.accounts = accounts
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case accounts = "Accounts"
            case nextToken = "NextToken"
        }
    }

    public struct ListAppInstanceAdminsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The maximum number of administrators that you want to return.
        public let maxResults: Int?
        /// The token returned from previous API requests until the number of administrators is reached.
        public let nextToken: String?

        public init(appInstanceArn: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAppInstanceAdminsResponse: AWSDecodableShape {
        /// The information for each administrator.
        public let appInstanceAdmins: [AppInstanceAdminSummary]?
        /// The ARN of the AppInstance.
        public let appInstanceArn: String?
        /// The token returned from previous API requests until the number of administrators is reached.
        public let nextToken: String?

        public init(appInstanceAdmins: [AppInstanceAdminSummary]? = nil, appInstanceArn: String? = nil, nextToken: String? = nil) {
            self.appInstanceAdmins = appInstanceAdmins
            self.appInstanceArn = appInstanceArn
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceAdmins = "AppInstanceAdmins"
            case appInstanceArn = "AppInstanceArn"
            case nextToken = "NextToken"
        }
    }

    public struct ListAppInstanceUsersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .querystring(locationName: "app-instance-arn")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The maximum number of requests that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested users are returned.
        public let nextToken: String?

        public init(appInstanceArn: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAppInstanceUsersResponse: AWSDecodableShape {
        /// The ARN of the AppInstance.
        public let appInstanceArn: String?
        /// The information for each requested AppInstanceUser.
        public let appInstanceUsers: [AppInstanceUserSummary]?
        /// The token passed by previous API calls until all requested users are returned.
        public let nextToken: String?

        public init(appInstanceArn: String? = nil, appInstanceUsers: [AppInstanceUserSummary]? = nil, nextToken: String? = nil) {
            self.appInstanceArn = appInstanceArn
            self.appInstanceUsers = appInstanceUsers
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
            case appInstanceUsers = "AppInstanceUsers"
            case nextToken = "NextToken"
        }
    }

    public struct ListAppInstancesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The maximum number of AppInstances that you want to return.
        public let maxResults: Int?
        /// The token passed by previous API requests until you reach the maximum number of AppInstances.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAppInstancesResponse: AWSDecodableShape {
        /// The information for each AppInstance.
        public let appInstances: [AppInstanceSummary]?
        /// The token passed by previous API requests until the maximum number of AppInstances is reached.
        public let nextToken: String?

        public init(appInstances: [AppInstanceSummary]? = nil, nextToken: String? = nil) {
            self.appInstances = appInstances
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case appInstances = "AppInstances"
            case nextToken = "NextToken"
        }
    }

    public struct ListAttendeeTagsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri(locationName: "attendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(attendeeId: String, meetingId: String) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAttendeeTagsResponse: AWSDecodableShape {
        /// A list of tag key-value pairs.
        public let tags: [Tag]?

        public init(tags: [Tag]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct ListAttendeesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, meetingId: String, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.meetingId = meetingId
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListAttendeesResponse: AWSDecodableShape {
        /// The Amazon Chime SDK attendee information.
        public let attendees: [Attendee]?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(attendees: [Attendee]? = nil, nextToken: String? = nil) {
            self.attendees = attendees
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case attendees = "Attendees"
            case nextToken = "NextToken"
        }
    }

    public struct ListBotsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The maximum number of results to return in a single call. The default is 10.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(accountId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.accountId = accountId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListBotsResponse: AWSDecodableShape {
        /// List of bots and bot details.
        public let bots: [Bot]?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(bots: [Bot]? = nil, nextToken: String? = nil) {
            self.bots = bots
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case bots = "Bots"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelBansRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of bans that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested bans are returned.
        public let nextToken: String?

        public init(channelArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelBansResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The information for each requested ban.
        public let channelBans: [ChannelBanSummary]?
        /// The token passed by previous API calls until all requested bans are returned.
        public let nextToken: String?

        public init(channelArn: String? = nil, channelBans: [ChannelBanSummary]? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.channelBans = channelBans
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelBans = "ChannelBans"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelMembershipsForAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .querystring(locationName: "app-instance-user-arn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The ARN of the AppInstanceUsers
        public let appInstanceUserArn: String?
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of users that you want returned.
        public let maxResults: Int?
        /// The token returned from previous API requests until the number of channel memberships is reached.
        public let nextToken: String?

        public init(appInstanceUserArn: String? = nil, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelMembershipsForAppInstanceUserResponse: AWSDecodableShape {
        /// The token passed by previous API calls until all requested users are returned.
        public let channelMemberships: [ChannelMembershipForAppInstanceUserSummary]?
        /// The token passed by previous API calls until all requested users are returned.
        public let nextToken: String?

        public init(channelMemberships: [ChannelMembershipForAppInstanceUserSummary]? = nil, nextToken: String? = nil) {
            self.channelMemberships = channelMemberships
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelMemberships = "ChannelMemberships"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelMembershipsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "type", location: .querystring(locationName: "type"))
        ]

        /// The maximum number of channel memberships that you want returned.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of channel memberships that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested channel memberships are returned.
        public let nextToken: String?
        /// The membership type of a user, DEFAULT or HIDDEN. Default members are always returned as part of ListChannelMemberships. Hidden members are only returned if the type filter in ListChannelMemberships equals HIDDEN. Otherwise hidden members are not returned.
        public let type: ChannelMembershipType?

        public init(channelArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, type: ChannelMembershipType? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelMembershipsResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The information for the requested channel memberships.
        public let channelMemberships: [ChannelMembershipSummary]?
        /// The token passed by previous API calls until all requested channel memberships are returned.
        public let nextToken: String?

        public init(channelArn: String? = nil, channelMemberships: [ChannelMembershipSummary]? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.channelMemberships = channelMemberships
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelMemberships = "ChannelMemberships"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelMessagesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "notAfter", location: .querystring(locationName: "not-after")),
            AWSMemberEncoding(label: "notBefore", location: .querystring(locationName: "not-before")),
            AWSMemberEncoding(label: "sortOrder", location: .querystring(locationName: "sort-order"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of messages that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested messages are returned.
        public let nextToken: String?
        /// The final or ending time stamp for your requested messages.
        public let notAfter: Date?
        /// The initial or starting time stamp for your requested messages.
        public let notBefore: Date?
        /// The order in which you want messages sorted. Default is Descending, based on time created.
        public let sortOrder: SortOrder?

        public init(channelArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, notAfter: Date? = nil, notBefore: Date? = nil, sortOrder: SortOrder? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.notAfter = notAfter
            self.notBefore = notBefore
            self.sortOrder = sortOrder
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelMessagesResponse: AWSDecodableShape {
        /// The ARN of the channel containing the requested messages.
        public let channelArn: String?
        /// The information about, and content of, each requested message.
        public let channelMessages: [ChannelMessageSummary]?
        /// The token passed by previous API calls until all requested messages are returned.
        public let nextToken: String?

        public init(channelArn: String? = nil, channelMessages: [ChannelMessageSummary]? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.channelMessages = channelMessages
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelMessages = "ChannelMessages"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelModeratorsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of moderators that you want returned.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested moderators are returned.
        public let nextToken: String?

        public init(channelArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelModeratorsResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The information about and names of each moderator.
        public let channelModerators: [ChannelModeratorSummary]?
        /// The token passed by previous API calls until all requested moderators are returned.
        public let nextToken: String?

        public init(channelArn: String? = nil, channelModerators: [ChannelModeratorSummary]? = nil, nextToken: String? = nil) {
            self.channelArn = channelArn
            self.channelModerators = channelModerators
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case channelModerators = "ChannelModerators"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelsModeratedByAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .querystring(locationName: "app-instance-user-arn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The ARN of the user in the moderated channel.
        public let appInstanceUserArn: String?
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of channels in the request.
        public let maxResults: Int?
        /// The token returned from previous API requests until the number of channels moderated by the user is reached.
        public let nextToken: String?

        public init(appInstanceUserArn: String? = nil, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelsModeratedByAppInstanceUserResponse: AWSDecodableShape {
        /// The moderated channels in the request.
        public let channels: [ChannelModeratedByAppInstanceUserSummary]?
        /// The token returned from previous API requests until the number of channels moderated by the user is reached.
        public let nextToken: String?

        public init(channels: [ChannelModeratedByAppInstanceUserSummary]? = nil, nextToken: String? = nil) {
            self.channels = channels
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channels = "Channels"
            case nextToken = "NextToken"
        }
    }

    public struct ListChannelsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .querystring(locationName: "app-instance-arn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "privacy", location: .querystring(locationName: "privacy"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The maximum number of channels that you want to return.
        public let maxResults: Int?
        /// The token passed by previous API calls until all requested channels are returned.
        public let nextToken: String?
        ///  The privacy setting. PUBLIC retrieves all the public channels. PRIVATE retrieves private channels. Only an AppInstanceAdmin can retrieve private channels.
        public let privacy: ChannelPrivacy?

        public init(appInstanceArn: String, chimeBearer: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, privacy: ChannelPrivacy? = nil) {
            self.appInstanceArn = appInstanceArn
            self.chimeBearer = chimeBearer
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.privacy = privacy
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 50)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 0)
            try self.validate(self.nextToken, name: "nextToken", parent: name, pattern: ".*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListChannelsResponse: AWSDecodableShape {
        /// The information about each channel.
        public let channels: [ChannelSummary]?
        /// The token returned from previous API requests until the number of channels is reached.
        public let nextToken: String?

        public init(channels: [ChannelSummary]? = nil, nextToken: String? = nil) {
            self.channels = channels
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case channels = "Channels"
            case nextToken = "NextToken"
        }
    }

    public struct ListMeetingTagsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String

        public init(meetingId: String) {
            self.meetingId = meetingId
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMeetingTagsResponse: AWSDecodableShape {
        /// A list of tag key-value pairs.
        public let tags: [Tag]?

        public init(tags: [Tag]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct ListMeetingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListMeetingsResponse: AWSDecodableShape {
        /// The Amazon Chime SDK meeting information.
        public let meetings: [Meeting]?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(meetings: [Meeting]? = nil, nextToken: String? = nil) {
            self.meetings = meetings
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case meetings = "Meetings"
            case nextToken = "NextToken"
        }
    }

    public struct ListPhoneNumberOrdersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListPhoneNumberOrdersResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The phone number order details.
        public let phoneNumberOrders: [PhoneNumberOrder]?

        public init(nextToken: String? = nil, phoneNumberOrders: [PhoneNumberOrder]? = nil) {
            self.nextToken = nextToken
            self.phoneNumberOrders = phoneNumberOrders
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case phoneNumberOrders = "PhoneNumberOrders"
        }
    }

    public struct ListPhoneNumbersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "filterName", location: .querystring(locationName: "filter-name")),
            AWSMemberEncoding(label: "filterValue", location: .querystring(locationName: "filter-value")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "productType", location: .querystring(locationName: "product-type")),
            AWSMemberEncoding(label: "status", location: .querystring(locationName: "status"))
        ]

        /// The filter to use to limit the number of results.
        public let filterName: PhoneNumberAssociationName?
        /// The value to use for the filter.
        public let filterValue: String?
        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The phone number product type.
        public let productType: PhoneNumberProductType?
        /// The phone number status.
        public let status: PhoneNumberStatus?

        public init(filterName: PhoneNumberAssociationName? = nil, filterValue: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, productType: PhoneNumberProductType? = nil, status: PhoneNumberStatus? = nil) {
            self.filterName = filterName
            self.filterValue = filterValue
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.productType = productType
            self.status = status
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListPhoneNumbersResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The phone number details.
        public let phoneNumbers: [PhoneNumber]?

        public init(nextToken: String? = nil, phoneNumbers: [PhoneNumber]? = nil) {
            self.nextToken = nextToken
            self.phoneNumbers = phoneNumbers
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case phoneNumbers = "PhoneNumbers"
        }
    }

    public struct ListProxySessionsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "status", location: .querystring(locationName: "status")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The proxy session status.
        public let status: ProxySessionStatus?
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(maxResults: Int? = nil, nextToken: String? = nil, status: ProxySessionStatus? = nil, voiceConnectorId: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.status = status
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 65535)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListProxySessionsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The proxy session details.
        public let proxySessions: [ProxySession]?

        public init(nextToken: String? = nil, proxySessions: [ProxySession]? = nil) {
            self.nextToken = nextToken
            self.proxySessions = proxySessions
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case proxySessions = "ProxySessions"
        }
    }

    public struct ListRoomMembershipsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "roomId", location: .uri(locationName: "roomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The room ID.
        public let roomId: String

        public init(accountId: String, maxResults: Int? = nil, nextToken: String? = nil, roomId: String) {
            self.accountId = accountId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListRoomMembershipsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The room membership details.
        public let roomMemberships: [RoomMembership]?

        public init(nextToken: String? = nil, roomMemberships: [RoomMembership]? = nil) {
            self.nextToken = nextToken
            self.roomMemberships = roomMemberships
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case roomMemberships = "RoomMemberships"
        }
    }

    public struct ListRoomsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "memberId", location: .querystring(locationName: "member-id")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The member ID (user ID or bot ID).
        public let memberId: String?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(accountId: String, maxResults: Int? = nil, memberId: String? = nil, nextToken: String? = nil) {
            self.accountId = accountId
            self.maxResults = maxResults
            self.memberId = memberId
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListRoomsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The room details.
        public let rooms: [Room]?

        public init(nextToken: String? = nil, rooms: [Room]? = nil) {
            self.nextToken = nextToken
            self.rooms = rooms
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case rooms = "Rooms"
        }
    }

    public struct ListSipMediaApplicationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The maximum number of results to return in a single call. Defaults to 100.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 65535)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSipMediaApplicationsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// List of SIP media applications and application details.
        public let sipMediaApplications: [SipMediaApplication]?

        public init(nextToken: String? = nil, sipMediaApplications: [SipMediaApplication]? = nil) {
            self.nextToken = nextToken
            self.sipMediaApplications = sipMediaApplications
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sipMediaApplications = "SipMediaApplications"
        }
    }

    public struct ListSipRulesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .querystring(locationName: "sip-media-application"))
        ]

        /// The maximum number of results to return in a single call. Defaults to 100.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The SIP media application ID.
        public let sipMediaApplicationId: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil, sipMediaApplicationId: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 65535)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListSipRulesResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// List of SIP rules and rule details.
        public let sipRules: [SipRule]?

        public init(nextToken: String? = nil, sipRules: [SipRule]? = nil) {
            self.nextToken = nextToken
            self.sipRules = sipRules
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sipRules = "SipRules"
        }
    }

    public struct ListTagsForResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceARN", location: .querystring(locationName: "arn"))
        ]

        /// The resource ARN.
        public let resourceARN: String

        public init(resourceARN: String) {
            self.resourceARN = resourceARN
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, max: 1024)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, min: 1)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListTagsForResourceResponse: AWSDecodableShape {
        /// A list of tag-key value pairs.
        public let tags: [Tag]?

        public init(tags: [Tag]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct ListUsersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "userEmail", location: .querystring(locationName: "user-email")),
            AWSMemberEncoding(label: "userType", location: .querystring(locationName: "user-type"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The maximum number of results to return in a single call. Defaults to 100.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// Optional. The user email address used to filter results. Maximum 1.
        public let userEmail: String?
        /// The user type.
        public let userType: UserType?

        public init(accountId: String, maxResults: Int? = nil, nextToken: String? = nil, userEmail: String? = nil, userType: UserType? = nil) {
            self.accountId = accountId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.userEmail = userEmail
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 200)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.userEmail, name: "userEmail", parent: name, pattern: ".+@.+\\..+")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListUsersResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// List of users and user details.
        public let users: [User]?

        public init(nextToken: String? = nil, users: [User]? = nil) {
            self.nextToken = nextToken
            self.users = users
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case users = "Users"
        }
    }

    public struct ListVoiceConnectorGroupsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVoiceConnectorGroupsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The details of the Amazon Chime Voice Connector groups.
        public let voiceConnectorGroups: [VoiceConnectorGroup]?

        public init(nextToken: String? = nil, voiceConnectorGroups: [VoiceConnectorGroup]? = nil) {
            self.nextToken = nextToken
            self.voiceConnectorGroups = voiceConnectorGroups
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case voiceConnectorGroups = "VoiceConnectorGroups"
        }
    }

    public struct ListVoiceConnectorTerminationCredentialsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(voiceConnectorId: String) {
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVoiceConnectorTerminationCredentialsResponse: AWSDecodableShape {
        /// A list of user names.
        public let usernames: [String]?

        public init(usernames: [String]? = nil) {
            self.usernames = usernames
        }

        private enum CodingKeys: String, CodingKey {
            case usernames = "Usernames"
        }
    }

    public struct ListVoiceConnectorsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token"))
        ]

        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?

        public init(maxResults: Int? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 99)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ListVoiceConnectorsResponse: AWSDecodableShape {
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The details of the Amazon Chime Voice Connectors.
        public let voiceConnectors: [VoiceConnector]?

        public init(nextToken: String? = nil, voiceConnectors: [VoiceConnector]? = nil) {
            self.nextToken = nextToken
            self.voiceConnectors = voiceConnectors
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case voiceConnectors = "VoiceConnectors"
        }
    }

    public struct LoggingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// When true, enables SIP message logs for sending to Amazon CloudWatch Logs.
        public let enableSIPLogs: Bool?

        public init(enableSIPLogs: Bool? = nil) {
            self.enableSIPLogs = enableSIPLogs
        }

        private enum CodingKeys: String, CodingKey {
            case enableSIPLogs = "EnableSIPLogs"
        }
    }

    public struct LogoutUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "userId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.userId, name: "userId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct LogoutUserResponse: AWSDecodableShape {
        public init() {}
    }

    public struct MediaPlacement: AWSDecodableShape {
        /// The audio fallback URL.
        public let audioFallbackUrl: String?
        /// The audio host URL.
        public let audioHostUrl: String?
        /// The screen data URL.
        public let screenDataUrl: String?
        /// The screen sharing URL.
        public let screenSharingUrl: String?
        /// The screen viewing URL.
        public let screenViewingUrl: String?
        /// The signaling URL.
        public let signalingUrl: String?
        /// The turn control URL.
        public let turnControlUrl: String?

        public init(audioFallbackUrl: String? = nil, audioHostUrl: String? = nil, screenDataUrl: String? = nil, screenSharingUrl: String? = nil, screenViewingUrl: String? = nil, signalingUrl: String? = nil, turnControlUrl: String? = nil) {
            self.audioFallbackUrl = audioFallbackUrl
            self.audioHostUrl = audioHostUrl
            self.screenDataUrl = screenDataUrl
            self.screenSharingUrl = screenSharingUrl
            self.screenViewingUrl = screenViewingUrl
            self.signalingUrl = signalingUrl
            self.turnControlUrl = turnControlUrl
        }

        private enum CodingKeys: String, CodingKey {
            case audioFallbackUrl = "AudioFallbackUrl"
            case audioHostUrl = "AudioHostUrl"
            case screenDataUrl = "ScreenDataUrl"
            case screenSharingUrl = "ScreenSharingUrl"
            case screenViewingUrl = "ScreenViewingUrl"
            case signalingUrl = "SignalingUrl"
            case turnControlUrl = "TurnControlUrl"
        }
    }

    public struct Meeting: AWSDecodableShape {
        /// The external meeting ID.
        public let externalMeetingId: String?
        /// The media placement for the meeting.
        public let mediaPlacement: MediaPlacement?
        ///  The Region in which you create the meeting. Available values: af-south-1 , ap-northeast-1 , ap-northeast-2 , ap-south-1 , ap-southeast-1 , ap-southeast-2 , ca-central-1 , eu-central-1 , eu-north-1 , eu-south-1 , eu-west-1 , eu-west-2 , eu-west-3 , sa-east-1 , us-east-1 , us-east-2 , us-west-1 , us-west-2 .
        public let mediaRegion: String?
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String?

        public init(externalMeetingId: String? = nil, mediaPlacement: MediaPlacement? = nil, mediaRegion: String? = nil, meetingId: String? = nil) {
            self.externalMeetingId = externalMeetingId
            self.mediaPlacement = mediaPlacement
            self.mediaRegion = mediaRegion
            self.meetingId = meetingId
        }

        private enum CodingKeys: String, CodingKey {
            case externalMeetingId = "ExternalMeetingId"
            case mediaPlacement = "MediaPlacement"
            case mediaRegion = "MediaRegion"
            case meetingId = "MeetingId"
        }
    }

    public struct MeetingNotificationConfiguration: AWSEncodableShape {
        /// The SNS topic ARN.
        public let snsTopicArn: String?
        /// The SQS queue ARN.
        public let sqsQueueArn: String?

        public init(snsTopicArn: String? = nil, sqsQueueArn: String? = nil) {
            self.snsTopicArn = snsTopicArn
            self.sqsQueueArn = sqsQueueArn
        }

        public func validate(name: String) throws {
            try self.validate(self.snsTopicArn, name: "snsTopicArn", parent: name, max: 1024)
            try self.validate(self.snsTopicArn, name: "snsTopicArn", parent: name, min: 1)
            try self.validate(self.snsTopicArn, name: "snsTopicArn", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
            try self.validate(self.sqsQueueArn, name: "sqsQueueArn", parent: name, max: 1024)
            try self.validate(self.sqsQueueArn, name: "sqsQueueArn", parent: name, min: 1)
            try self.validate(self.sqsQueueArn, name: "sqsQueueArn", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case snsTopicArn = "SnsTopicArn"
            case sqsQueueArn = "SqsQueueArn"
        }
    }

    public struct Member: AWSDecodableShape {
        /// The Amazon Chime account ID.
        public let accountId: String?
        /// The member email address.
        public let email: String?
        /// The member name.
        public let fullName: String?
        /// The member ID (user ID or bot ID).
        public let memberId: String?
        /// The member type.
        public let memberType: MemberType?

        public init(accountId: String? = nil, email: String? = nil, fullName: String? = nil, memberId: String? = nil, memberType: MemberType? = nil) {
            self.accountId = accountId
            self.email = email
            self.fullName = fullName
            self.memberId = memberId
            self.memberType = memberType
        }

        private enum CodingKeys: String, CodingKey {
            case accountId = "AccountId"
            case email = "Email"
            case fullName = "FullName"
            case memberId = "MemberId"
            case memberType = "MemberType"
        }
    }

    public struct MemberError: AWSDecodableShape {
        /// The error code.
        public let errorCode: ErrorCode?
        /// The error message.
        public let errorMessage: String?
        /// The member ID.
        public let memberId: String?

        public init(errorCode: ErrorCode? = nil, errorMessage: String? = nil, memberId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.memberId = memberId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case memberId = "MemberId"
        }
    }

    public struct MembershipItem: AWSEncodableShape {
        /// The member ID.
        public let memberId: String?
        /// The member role.
        public let role: RoomMembershipRole?

        public init(memberId: String? = nil, role: RoomMembershipRole? = nil) {
            self.memberId = memberId
            self.role = role
        }

        public func validate(name: String) throws {
            try self.validate(self.memberId, name: "memberId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case memberId = "MemberId"
            case role = "Role"
        }
    }

    public struct MessagingSessionEndpoint: AWSDecodableShape {
        /// The endpoint to which you establish a websocket connection.
        public let url: String?

        public init(url: String? = nil) {
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case url = "Url"
        }
    }

    public struct OrderedPhoneNumber: AWSDecodableShape {
        /// The phone number, in E.164 format.
        public let e164PhoneNumber: String?
        /// The phone number status.
        public let status: OrderedPhoneNumberStatus?

        public init(e164PhoneNumber: String? = nil, status: OrderedPhoneNumberStatus? = nil) {
            self.e164PhoneNumber = e164PhoneNumber
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumber = "E164PhoneNumber"
            case status = "Status"
        }
    }

    public struct Origination: AWSEncodableShape & AWSDecodableShape {
        /// When origination settings are disabled, inbound calls are not enabled for your Amazon Chime Voice Connector.
        public let disabled: Bool?
        /// The call distribution properties defined for your SIP hosts. Valid range: Minimum value of 1. Maximum value of 20.
        public let routes: [OriginationRoute]?

        public init(disabled: Bool? = nil, routes: [OriginationRoute]? = nil) {
            self.disabled = disabled
            self.routes = routes
        }

        public func validate(name: String) throws {
            try self.routes?.forEach {
                try $0.validate(name: "\(name).routes[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
            case routes = "Routes"
        }
    }

    public struct OriginationRoute: AWSEncodableShape & AWSDecodableShape {
        /// The FQDN or IP address to contact for origination traffic.
        public let host: String?
        /// The designated origination route port. Defaults to 5060.
        public let port: Int?
        /// The priority associated with the host, with 1 being the highest priority. Higher priority hosts are attempted first.
        public let priority: Int?
        /// The protocol to use for the origination route. Encryption-enabled Amazon Chime Voice Connectors use TCP protocol by default.
        public let `protocol`: OriginationRouteProtocol?
        /// The weight associated with the host. If hosts are equal in priority, calls are redistributed among them based on their relative weight.
        public let weight: Int?

        public init(host: String? = nil, port: Int? = nil, priority: Int? = nil, protocol: OriginationRouteProtocol? = nil, weight: Int? = nil) {
            self.host = host
            self.port = port
            self.priority = priority
            self.`protocol` = `protocol`
            self.weight = weight
        }

        public func validate(name: String) throws {
            try self.validate(self.port, name: "port", parent: name, max: 65535)
            try self.validate(self.port, name: "port", parent: name, min: 0)
            try self.validate(self.priority, name: "priority", parent: name, max: 100)
            try self.validate(self.priority, name: "priority", parent: name, min: 1)
            try self.validate(self.weight, name: "weight", parent: name, max: 100)
            try self.validate(self.weight, name: "weight", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case host = "Host"
            case port = "Port"
            case priority = "Priority"
            case `protocol` = "Protocol"
            case weight = "Weight"
        }
    }

    public struct Participant: AWSDecodableShape {
        /// The participant's phone number.
        public let phoneNumber: String?
        /// The participant's proxy phone number.
        public let proxyPhoneNumber: String?

        public init(phoneNumber: String? = nil, proxyPhoneNumber: String? = nil) {
            self.phoneNumber = phoneNumber
            self.proxyPhoneNumber = proxyPhoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
            case proxyPhoneNumber = "ProxyPhoneNumber"
        }
    }

    public struct PhoneNumber: AWSDecodableShape {
        /// The phone number associations.
        public let associations: [PhoneNumberAssociation]?
        /// The outbound calling name associated with the phone number.
        public let callingName: String?
        /// The outbound calling name status.
        public let callingNameStatus: CallingNameStatus?
        /// The phone number capabilities.
        public let capabilities: PhoneNumberCapabilities?
        /// The phone number creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The deleted phone number timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var deletionTimestamp: Date?
        /// The phone number, in E.164 format.
        public let e164PhoneNumber: String?
        /// The phone number ID.
        public let phoneNumberId: String?
        /// The phone number product type.
        public let productType: PhoneNumberProductType?
        /// The phone number status.
        public let status: PhoneNumberStatus?
        /// The phone number type.
        public let type: PhoneNumberType?
        /// The updated phone number timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(associations: [PhoneNumberAssociation]? = nil, callingName: String? = nil, callingNameStatus: CallingNameStatus? = nil, capabilities: PhoneNumberCapabilities? = nil, createdTimestamp: Date? = nil, deletionTimestamp: Date? = nil, e164PhoneNumber: String? = nil, phoneNumberId: String? = nil, productType: PhoneNumberProductType? = nil, status: PhoneNumberStatus? = nil, type: PhoneNumberType? = nil, updatedTimestamp: Date? = nil) {
            self.associations = associations
            self.callingName = callingName
            self.callingNameStatus = callingNameStatus
            self.capabilities = capabilities
            self.createdTimestamp = createdTimestamp
            self.deletionTimestamp = deletionTimestamp
            self.e164PhoneNumber = e164PhoneNumber
            self.phoneNumberId = phoneNumberId
            self.productType = productType
            self.status = status
            self.type = type
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case associations = "Associations"
            case callingName = "CallingName"
            case callingNameStatus = "CallingNameStatus"
            case capabilities = "Capabilities"
            case createdTimestamp = "CreatedTimestamp"
            case deletionTimestamp = "DeletionTimestamp"
            case e164PhoneNumber = "E164PhoneNumber"
            case phoneNumberId = "PhoneNumberId"
            case productType = "ProductType"
            case status = "Status"
            case type = "Type"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct PhoneNumberAssociation: AWSDecodableShape {
        /// The timestamp of the phone number association, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var associatedTimestamp: Date?
        /// Defines the association with an Amazon Chime account ID, user ID, Amazon Chime Voice Connector ID, or Amazon Chime Voice Connector group ID.
        public let name: PhoneNumberAssociationName?
        /// Contains the ID for the entity specified in Name.
        public let value: String?

        public init(associatedTimestamp: Date? = nil, name: PhoneNumberAssociationName? = nil, value: String? = nil) {
            self.associatedTimestamp = associatedTimestamp
            self.name = name
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case associatedTimestamp = "AssociatedTimestamp"
            case name = "Name"
            case value = "Value"
        }
    }

    public struct PhoneNumberCapabilities: AWSDecodableShape {
        /// Allows or denies inbound calling for the specified phone number.
        public let inboundCall: Bool?
        /// Allows or denies inbound MMS messaging for the specified phone number.
        public let inboundMMS: Bool?
        /// Allows or denies inbound SMS messaging for the specified phone number.
        public let inboundSMS: Bool?
        /// Allows or denies outbound calling for the specified phone number.
        public let outboundCall: Bool?
        /// Allows or denies outbound MMS messaging for the specified phone number.
        public let outboundMMS: Bool?
        /// Allows or denies outbound SMS messaging for the specified phone number.
        public let outboundSMS: Bool?

        public init(inboundCall: Bool? = nil, inboundMMS: Bool? = nil, inboundSMS: Bool? = nil, outboundCall: Bool? = nil, outboundMMS: Bool? = nil, outboundSMS: Bool? = nil) {
            self.inboundCall = inboundCall
            self.inboundMMS = inboundMMS
            self.inboundSMS = inboundSMS
            self.outboundCall = outboundCall
            self.outboundMMS = outboundMMS
            self.outboundSMS = outboundSMS
        }

        private enum CodingKeys: String, CodingKey {
            case inboundCall = "InboundCall"
            case inboundMMS = "InboundMMS"
            case inboundSMS = "InboundSMS"
            case outboundCall = "OutboundCall"
            case outboundMMS = "OutboundMMS"
            case outboundSMS = "OutboundSMS"
        }
    }

    public struct PhoneNumberError: AWSDecodableShape {
        /// The error code.
        public let errorCode: ErrorCode?
        /// The error message.
        public let errorMessage: String?
        /// The phone number ID for which the action failed.
        public let phoneNumberId: String?

        public init(errorCode: ErrorCode? = nil, errorMessage: String? = nil, phoneNumberId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.phoneNumberId = phoneNumberId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case phoneNumberId = "PhoneNumberId"
        }
    }

    public struct PhoneNumberOrder: AWSDecodableShape {
        /// The phone number order creation time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The ordered phone number details, such as the phone number in E.164 format and the phone number status.
        public let orderedPhoneNumbers: [OrderedPhoneNumber]?
        /// The phone number order ID.
        public let phoneNumberOrderId: String?
        /// The phone number order product type.
        public let productType: PhoneNumberProductType?
        /// The status of the phone number order.
        public let status: PhoneNumberOrderStatus?
        /// The updated phone number order time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(createdTimestamp: Date? = nil, orderedPhoneNumbers: [OrderedPhoneNumber]? = nil, phoneNumberOrderId: String? = nil, productType: PhoneNumberProductType? = nil, status: PhoneNumberOrderStatus? = nil, updatedTimestamp: Date? = nil) {
            self.createdTimestamp = createdTimestamp
            self.orderedPhoneNumbers = orderedPhoneNumbers
            self.phoneNumberOrderId = phoneNumberOrderId
            self.productType = productType
            self.status = status
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case createdTimestamp = "CreatedTimestamp"
            case orderedPhoneNumbers = "OrderedPhoneNumbers"
            case phoneNumberOrderId = "PhoneNumberOrderId"
            case productType = "ProductType"
            case status = "Status"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct Proxy: AWSDecodableShape {
        /// The default number of minutes allowed for proxy sessions.
        public let defaultSessionExpiryMinutes: Int?
        /// When true, stops proxy sessions from being created on the specified Amazon Chime Voice Connector.
        public let disabled: Bool?
        /// The phone number to route calls to after a proxy session expires.
        public let fallBackPhoneNumber: String?
        /// The countries for proxy phone numbers to be selected from.
        public let phoneNumberCountries: [String]?

        public init(defaultSessionExpiryMinutes: Int? = nil, disabled: Bool? = nil, fallBackPhoneNumber: String? = nil, phoneNumberCountries: [String]? = nil) {
            self.defaultSessionExpiryMinutes = defaultSessionExpiryMinutes
            self.disabled = disabled
            self.fallBackPhoneNumber = fallBackPhoneNumber
            self.phoneNumberCountries = phoneNumberCountries
        }

        private enum CodingKeys: String, CodingKey {
            case defaultSessionExpiryMinutes = "DefaultSessionExpiryMinutes"
            case disabled = "Disabled"
            case fallBackPhoneNumber = "FallBackPhoneNumber"
            case phoneNumberCountries = "PhoneNumberCountries"
        }
    }

    public struct ProxySession: AWSDecodableShape {
        /// The proxy session capabilities.
        public let capabilities: [Capability]?
        /// The created time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The ended time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var endedTimestamp: Date?
        /// The number of minutes allowed for the proxy session.
        public let expiryMinutes: Int?
        /// The preference for matching the country or area code of the proxy phone number with that of the first participant.
        public let geoMatchLevel: GeoMatchLevel?
        /// The country and area code for the proxy phone number.
        public let geoMatchParams: GeoMatchParams?
        /// The name of the proxy session.
        public let name: String?
        /// The preference for proxy phone number reuse, or stickiness, between the same participants across sessions.
        public let numberSelectionBehavior: NumberSelectionBehavior?
        /// The proxy session participants.
        public let participants: [Participant]?
        /// The proxy session ID.
        public let proxySessionId: String?
        /// The status of the proxy session.
        public let status: ProxySessionStatus?
        /// The updated time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String?

        public init(capabilities: [Capability]? = nil, createdTimestamp: Date? = nil, endedTimestamp: Date? = nil, expiryMinutes: Int? = nil, geoMatchLevel: GeoMatchLevel? = nil, geoMatchParams: GeoMatchParams? = nil, name: String? = nil, numberSelectionBehavior: NumberSelectionBehavior? = nil, participants: [Participant]? = nil, proxySessionId: String? = nil, status: ProxySessionStatus? = nil, updatedTimestamp: Date? = nil, voiceConnectorId: String? = nil) {
            self.capabilities = capabilities
            self.createdTimestamp = createdTimestamp
            self.endedTimestamp = endedTimestamp
            self.expiryMinutes = expiryMinutes
            self.geoMatchLevel = geoMatchLevel
            self.geoMatchParams = geoMatchParams
            self.name = name
            self.numberSelectionBehavior = numberSelectionBehavior
            self.participants = participants
            self.proxySessionId = proxySessionId
            self.status = status
            self.updatedTimestamp = updatedTimestamp
            self.voiceConnectorId = voiceConnectorId
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "Capabilities"
            case createdTimestamp = "CreatedTimestamp"
            case endedTimestamp = "EndedTimestamp"
            case expiryMinutes = "ExpiryMinutes"
            case geoMatchLevel = "GeoMatchLevel"
            case geoMatchParams = "GeoMatchParams"
            case name = "Name"
            case numberSelectionBehavior = "NumberSelectionBehavior"
            case participants = "Participants"
            case proxySessionId = "ProxySessionId"
            case status = "Status"
            case updatedTimestamp = "UpdatedTimestamp"
            case voiceConnectorId = "VoiceConnectorId"
        }
    }

    public struct PutAppInstanceRetentionSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The time in days to retain data. Data type: number.
        public let appInstanceRetentionSettings: AppInstanceRetentionSettings

        public init(appInstanceArn: String, appInstanceRetentionSettings: AppInstanceRetentionSettings) {
            self.appInstanceArn = appInstanceArn
            self.appInstanceRetentionSettings = appInstanceRetentionSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.appInstanceRetentionSettings.validate(name: "\(name).appInstanceRetentionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceRetentionSettings = "AppInstanceRetentionSettings"
        }
    }

    public struct PutAppInstanceRetentionSettingsResponse: AWSDecodableShape {
        /// The time in days to retain data. Data type: number.
        public let appInstanceRetentionSettings: AppInstanceRetentionSettings?
        /// The time at which the API deletes data.
        public let initiateDeletionTimestamp: Date?

        public init(appInstanceRetentionSettings: AppInstanceRetentionSettings? = nil, initiateDeletionTimestamp: Date? = nil) {
            self.appInstanceRetentionSettings = appInstanceRetentionSettings
            self.initiateDeletionTimestamp = initiateDeletionTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceRetentionSettings = "AppInstanceRetentionSettings"
            case initiateDeletionTimestamp = "InitiateDeletionTimestamp"
        }
    }

    public struct PutAppInstanceStreamingConfigurationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The streaming configurations set for an AppInstance.
        public let appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]

        public init(appInstanceArn: String, appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]) {
            self.appInstanceArn = appInstanceArn
            self.appInstanceStreamingConfigurations = appInstanceStreamingConfigurations
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.appInstanceStreamingConfigurations.forEach {
                try $0.validate(name: "\(name).appInstanceStreamingConfigurations[]")
            }
            try self.validate(self.appInstanceStreamingConfigurations, name: "appInstanceStreamingConfigurations", parent: name, max: 2)
            try self.validate(self.appInstanceStreamingConfigurations, name: "appInstanceStreamingConfigurations", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceStreamingConfigurations = "AppInstanceStreamingConfigurations"
        }
    }

    public struct PutAppInstanceStreamingConfigurationsResponse: AWSDecodableShape {
        /// The streaming configurations of an AppInstance.
        public let appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]?

        public init(appInstanceStreamingConfigurations: [AppInstanceStreamingConfiguration]? = nil) {
            self.appInstanceStreamingConfigurations = appInstanceStreamingConfigurations
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceStreamingConfigurations = "AppInstanceStreamingConfigurations"
        }
    }

    public struct PutEventsConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "botId", location: .uri(locationName: "botId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String
        /// Lambda function ARN that allows the bot to receive outgoing events.
        public let lambdaFunctionArn: String?
        /// HTTPS endpoint that allows the bot to receive outgoing events.
        public let outboundEventsHTTPSEndpoint: String?

        public init(accountId: String, botId: String, lambdaFunctionArn: String? = nil, outboundEventsHTTPSEndpoint: String? = nil) {
            self.accountId = accountId
            self.botId = botId
            self.lambdaFunctionArn = lambdaFunctionArn
            self.outboundEventsHTTPSEndpoint = outboundEventsHTTPSEndpoint
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.botId, name: "botId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case lambdaFunctionArn = "LambdaFunctionArn"
            case outboundEventsHTTPSEndpoint = "OutboundEventsHTTPSEndpoint"
        }
    }

    public struct PutEventsConfigurationResponse: AWSDecodableShape {
        public let eventsConfiguration: EventsConfiguration?

        public init(eventsConfiguration: EventsConfiguration? = nil) {
            self.eventsConfiguration = eventsConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case eventsConfiguration = "EventsConfiguration"
        }
    }

    public struct PutRetentionSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The retention settings.
        public let retentionSettings: RetentionSettings

        public init(accountId: String, retentionSettings: RetentionSettings) {
            self.accountId = accountId
            self.retentionSettings = retentionSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.retentionSettings.validate(name: "\(name).retentionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case retentionSettings = "RetentionSettings"
        }
    }

    public struct PutRetentionSettingsResponse: AWSDecodableShape {
        /// The timestamp representing the time at which the specified items are permanently deleted, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var initiateDeletionTimestamp: Date?
        /// The retention settings.
        public let retentionSettings: RetentionSettings?

        public init(initiateDeletionTimestamp: Date? = nil, retentionSettings: RetentionSettings? = nil) {
            self.initiateDeletionTimestamp = initiateDeletionTimestamp
            self.retentionSettings = retentionSettings
        }

        private enum CodingKeys: String, CodingKey {
            case initiateDeletionTimestamp = "InitiateDeletionTimestamp"
            case retentionSettings = "RetentionSettings"
        }
    }

    public struct PutSipMediaApplicationLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri(locationName: "sipMediaApplicationId"))
        ]

        /// The SIP media application ID.
        public let sipMediaApplicationId: String
        /// The actual logging configuration.
        public let sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration?

        public init(sipMediaApplicationId: String, sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration? = nil) {
            self.sipMediaApplicationId = sipMediaApplicationId
            self.sipMediaApplicationLoggingConfiguration = sipMediaApplicationLoggingConfiguration
        }

        public func validate(name: String) throws {
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationLoggingConfiguration = "SipMediaApplicationLoggingConfiguration"
        }
    }

    public struct PutSipMediaApplicationLoggingConfigurationResponse: AWSDecodableShape {
        public let sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration?

        public init(sipMediaApplicationLoggingConfiguration: SipMediaApplicationLoggingConfiguration? = nil) {
            self.sipMediaApplicationLoggingConfiguration = sipMediaApplicationLoggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplicationLoggingConfiguration = "SipMediaApplicationLoggingConfiguration"
        }
    }

    public struct PutVoiceConnectorEmergencyCallingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The emergency calling configuration details.
        public let emergencyCallingConfiguration: EmergencyCallingConfiguration
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(emergencyCallingConfiguration: EmergencyCallingConfiguration, voiceConnectorId: String) {
            self.emergencyCallingConfiguration = emergencyCallingConfiguration
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.emergencyCallingConfiguration.validate(name: "\(name).emergencyCallingConfiguration")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case emergencyCallingConfiguration = "EmergencyCallingConfiguration"
        }
    }

    public struct PutVoiceConnectorEmergencyCallingConfigurationResponse: AWSDecodableShape {
        /// The emergency calling configuration details.
        public let emergencyCallingConfiguration: EmergencyCallingConfiguration?

        public init(emergencyCallingConfiguration: EmergencyCallingConfiguration? = nil) {
            self.emergencyCallingConfiguration = emergencyCallingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case emergencyCallingConfiguration = "EmergencyCallingConfiguration"
        }
    }

    public struct PutVoiceConnectorLoggingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The logging configuration details to add.
        public let loggingConfiguration: LoggingConfiguration
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(loggingConfiguration: LoggingConfiguration, voiceConnectorId: String) {
            self.loggingConfiguration = loggingConfiguration
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case loggingConfiguration = "LoggingConfiguration"
        }
    }

    public struct PutVoiceConnectorLoggingConfigurationResponse: AWSDecodableShape {
        /// The updated logging configuration details.
        public let loggingConfiguration: LoggingConfiguration?

        public init(loggingConfiguration: LoggingConfiguration? = nil) {
            self.loggingConfiguration = loggingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case loggingConfiguration = "LoggingConfiguration"
        }
    }

    public struct PutVoiceConnectorOriginationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The origination setting details to add.
        public let origination: Origination
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(origination: Origination, voiceConnectorId: String) {
            self.origination = origination
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.origination.validate(name: "\(name).origination")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case origination = "Origination"
        }
    }

    public struct PutVoiceConnectorOriginationResponse: AWSDecodableShape {
        /// The updated origination setting details.
        public let origination: Origination?

        public init(origination: Origination? = nil) {
            self.origination = origination
        }

        private enum CodingKeys: String, CodingKey {
            case origination = "Origination"
        }
    }

    public struct PutVoiceConnectorProxyRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The default number of minutes allowed for proxy sessions.
        public let defaultSessionExpiryMinutes: Int
        /// When true, stops proxy sessions from being created on the specified Amazon Chime Voice Connector.
        public let disabled: Bool?
        /// The phone number to route calls to after a proxy session expires.
        public let fallBackPhoneNumber: String?
        /// The countries for proxy phone numbers to be selected from.
        public let phoneNumberPoolCountries: [String]
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(defaultSessionExpiryMinutes: Int, disabled: Bool? = nil, fallBackPhoneNumber: String? = nil, phoneNumberPoolCountries: [String], voiceConnectorId: String) {
            self.defaultSessionExpiryMinutes = defaultSessionExpiryMinutes
            self.disabled = disabled
            self.fallBackPhoneNumber = fallBackPhoneNumber
            self.phoneNumberPoolCountries = phoneNumberPoolCountries
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.fallBackPhoneNumber, name: "fallBackPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
            try self.phoneNumberPoolCountries.forEach {
                try validate($0, name: "phoneNumberPoolCountries[]", parent: name, pattern: "^$|^[A-Z]{2,2}$")
            }
            try self.validate(self.phoneNumberPoolCountries, name: "phoneNumberPoolCountries", parent: name, max: 100)
            try self.validate(self.phoneNumberPoolCountries, name: "phoneNumberPoolCountries", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case defaultSessionExpiryMinutes = "DefaultSessionExpiryMinutes"
            case disabled = "Disabled"
            case fallBackPhoneNumber = "FallBackPhoneNumber"
            case phoneNumberPoolCountries = "PhoneNumberPoolCountries"
        }
    }

    public struct PutVoiceConnectorProxyResponse: AWSDecodableShape {
        /// The proxy configuration details.
        public let proxy: Proxy?

        public init(proxy: Proxy? = nil) {
            self.proxy = proxy
        }

        private enum CodingKeys: String, CodingKey {
            case proxy = "Proxy"
        }
    }

    public struct PutVoiceConnectorStreamingConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The streaming configuration details to add.
        public let streamingConfiguration: StreamingConfiguration
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(streamingConfiguration: StreamingConfiguration, voiceConnectorId: String) {
            self.streamingConfiguration = streamingConfiguration
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.streamingConfiguration.validate(name: "\(name).streamingConfiguration")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case streamingConfiguration = "StreamingConfiguration"
        }
    }

    public struct PutVoiceConnectorStreamingConfigurationResponse: AWSDecodableShape {
        /// The updated streaming configuration details.
        public let streamingConfiguration: StreamingConfiguration?

        public init(streamingConfiguration: StreamingConfiguration? = nil) {
            self.streamingConfiguration = streamingConfiguration
        }

        private enum CodingKeys: String, CodingKey {
            case streamingConfiguration = "StreamingConfiguration"
        }
    }

    public struct PutVoiceConnectorTerminationCredentialsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The termination SIP credentials.
        public let credentials: [Credential]?
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(credentials: [Credential]? = nil, voiceConnectorId: String) {
            self.credentials = credentials
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case credentials = "Credentials"
        }
    }

    public struct PutVoiceConnectorTerminationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The termination setting details to add.
        public let termination: Termination
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(termination: Termination, voiceConnectorId: String) {
            self.termination = termination
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.termination.validate(name: "\(name).termination")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case termination = "Termination"
        }
    }

    public struct PutVoiceConnectorTerminationResponse: AWSDecodableShape {
        /// The updated termination setting details.
        public let termination: Termination?

        public init(termination: Termination? = nil) {
            self.termination = termination
        }

        private enum CodingKeys: String, CodingKey {
            case termination = "Termination"
        }
    }

    public struct RedactChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "messageId", location: .uri(locationName: "messageId"))
        ]

        /// The ARN of the channel containing the messages that you want to redact.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The ID of the message being redacted.
        public let messageId: String

        public init(channelArn: String, chimeBearer: String? = nil, messageId: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.messageId = messageId
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.messageId, name: "messageId", parent: name, max: 128)
            try self.validate(self.messageId, name: "messageId", parent: name, min: 1)
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "[-_a-zA-Z0-9]*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RedactChannelMessageResponse: AWSDecodableShape {
        /// The ARN of the channel containing the messages that you want to redact.
        public let channelArn: String?
        /// The ID of the message being redacted.
        public let messageId: String?

        public init(channelArn: String? = nil, messageId: String? = nil) {
            self.channelArn = channelArn
            self.messageId = messageId
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case messageId = "MessageId"
        }
    }

    public struct RedactConversationMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "conversationId", location: .uri(locationName: "conversationId")),
            AWSMemberEncoding(label: "messageId", location: .uri(locationName: "messageId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The conversation ID.
        public let conversationId: String
        /// The message ID.
        public let messageId: String

        public init(accountId: String, conversationId: String, messageId: String) {
            self.accountId = accountId
            self.conversationId = conversationId
            self.messageId = messageId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.conversationId, name: "conversationId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RedactConversationMessageResponse: AWSDecodableShape {
        public init() {}
    }

    public struct RedactRoomMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "messageId", location: .uri(locationName: "messageId")),
            AWSMemberEncoding(label: "roomId", location: .uri(locationName: "roomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The message ID.
        public let messageId: String
        /// The room ID.
        public let roomId: String

        public init(accountId: String, messageId: String, roomId: String) {
            self.accountId = accountId
            self.messageId = messageId
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RedactRoomMessageResponse: AWSDecodableShape {
        public init() {}
    }

    public struct RegenerateSecurityTokenRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "botId", location: .uri(locationName: "botId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String

        public init(accountId: String, botId: String) {
            self.accountId = accountId
            self.botId = botId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.botId, name: "botId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RegenerateSecurityTokenResponse: AWSDecodableShape {
        public let bot: Bot?

        public init(bot: Bot? = nil) {
            self.bot = bot
        }

        private enum CodingKeys: String, CodingKey {
            case bot = "Bot"
        }
    }

    public struct ResetPersonalPINRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "userId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String

        public init(accountId: String, userId: String) {
            self.accountId = accountId
            self.userId = userId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.userId, name: "userId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ResetPersonalPINResponse: AWSDecodableShape {
        /// The user details and new personal meeting PIN.
        public let user: User?

        public init(user: User? = nil) {
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case user = "User"
        }
    }

    public struct RestorePhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri(locationName: "phoneNumberId"))
        ]

        /// The phone number.
        public let phoneNumberId: String

        public init(phoneNumberId: String) {
            self.phoneNumberId = phoneNumberId
        }

        public func validate(name: String) throws {
            try self.validate(self.phoneNumberId, name: "phoneNumberId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct RestorePhoneNumberResponse: AWSDecodableShape {
        /// The phone number details.
        public let phoneNumber: PhoneNumber?

        public init(phoneNumber: PhoneNumber? = nil) {
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct RetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The chat conversation retention settings.
        public let conversationRetentionSettings: ConversationRetentionSettings?
        /// The chat room retention settings.
        public let roomRetentionSettings: RoomRetentionSettings?

        public init(conversationRetentionSettings: ConversationRetentionSettings? = nil, roomRetentionSettings: RoomRetentionSettings? = nil) {
            self.conversationRetentionSettings = conversationRetentionSettings
            self.roomRetentionSettings = roomRetentionSettings
        }

        public func validate(name: String) throws {
            try self.conversationRetentionSettings?.validate(name: "\(name).conversationRetentionSettings")
            try self.roomRetentionSettings?.validate(name: "\(name).roomRetentionSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case conversationRetentionSettings = "ConversationRetentionSettings"
            case roomRetentionSettings = "RoomRetentionSettings"
        }
    }

    public struct Room: AWSDecodableShape {
        /// The Amazon Chime account ID.
        public let accountId: String?
        /// The identifier of the room creator.
        public let createdBy: String?
        /// The room creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The room name.
        public let name: String?
        /// The room ID.
        public let roomId: String?
        /// The room update timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(accountId: String? = nil, createdBy: String? = nil, createdTimestamp: Date? = nil, name: String? = nil, roomId: String? = nil, updatedTimestamp: Date? = nil) {
            self.accountId = accountId
            self.createdBy = createdBy
            self.createdTimestamp = createdTimestamp
            self.name = name
            self.roomId = roomId
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case accountId = "AccountId"
            case createdBy = "CreatedBy"
            case createdTimestamp = "CreatedTimestamp"
            case name = "Name"
            case roomId = "RoomId"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct RoomMembership: AWSDecodableShape {
        /// The identifier of the user that invited the room member.
        public let invitedBy: String?
        public let member: Member?
        /// The membership role.
        public let role: RoomMembershipRole?
        /// The room ID.
        public let roomId: String?
        /// The room membership update timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(invitedBy: String? = nil, member: Member? = nil, role: RoomMembershipRole? = nil, roomId: String? = nil, updatedTimestamp: Date? = nil) {
            self.invitedBy = invitedBy
            self.member = member
            self.role = role
            self.roomId = roomId
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case invitedBy = "InvitedBy"
            case member = "Member"
            case role = "Role"
            case roomId = "RoomId"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct RoomRetentionSettings: AWSEncodableShape & AWSDecodableShape {
        /// The number of days for which to retain chat-room messages.
        public let retentionDays: Int?

        public init(retentionDays: Int? = nil) {
            self.retentionDays = retentionDays
        }

        public func validate(name: String) throws {
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, max: 5475)
            try self.validate(self.retentionDays, name: "retentionDays", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case retentionDays = "RetentionDays"
        }
    }

    public struct SearchAvailablePhoneNumbersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "areaCode", location: .querystring(locationName: "area-code")),
            AWSMemberEncoding(label: "city", location: .querystring(locationName: "city")),
            AWSMemberEncoding(label: "country", location: .querystring(locationName: "country")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "max-results")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "next-token")),
            AWSMemberEncoding(label: "state", location: .querystring(locationName: "state")),
            AWSMemberEncoding(label: "tollFreePrefix", location: .querystring(locationName: "toll-free-prefix"))
        ]

        /// The area code used to filter results.
        public let areaCode: String?
        /// The city used to filter results.
        public let city: String?
        /// The country used to filter results.
        public let country: String?
        /// The maximum number of results to return in a single call.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results.
        public let nextToken: String?
        /// The state used to filter results.
        public let state: String?
        /// The toll-free prefix that you use to filter results.
        public let tollFreePrefix: String?

        public init(areaCode: String? = nil, city: String? = nil, country: String? = nil, maxResults: Int? = nil, nextToken: String? = nil, state: String? = nil, tollFreePrefix: String? = nil) {
            self.areaCode = areaCode
            self.city = city
            self.country = country
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.state = state
            self.tollFreePrefix = tollFreePrefix
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 500)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.tollFreePrefix, name: "tollFreePrefix", parent: name, max: 3)
            try self.validate(self.tollFreePrefix, name: "tollFreePrefix", parent: name, min: 3)
            try self.validate(self.tollFreePrefix, name: "tollFreePrefix", parent: name, pattern: "^8(00|33|44|55|66|77|88)$")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct SearchAvailablePhoneNumbersResponse: AWSDecodableShape {
        /// List of phone numbers, in E.164 format.
        public let e164PhoneNumbers: [String]?

        public init(e164PhoneNumbers: [String]? = nil) {
            self.e164PhoneNumbers = e164PhoneNumbers
        }

        private enum CodingKeys: String, CodingKey {
            case e164PhoneNumbers = "E164PhoneNumbers"
        }
    }

    public struct SendChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The Idempotency token for each client request.
        public let clientRequestToken: String
        /// The content of the message.
        public let content: String
        /// The optional metadata for each message.
        public let metadata: String?
        /// Boolean that controls whether the message is persisted on the back end. Required.
        public let persistence: ChannelMessagePersistenceType
        /// The type of message, STANDARD or CONTROL.
        public let type: ChannelMessageType

        public init(channelArn: String, chimeBearer: String? = nil, clientRequestToken: String = SendChannelMessageRequest.idempotencyToken(), content: String, metadata: String? = nil, persistence: ChannelMessagePersistenceType, type: ChannelMessageType) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.clientRequestToken = clientRequestToken
            self.content = content
            self.metadata = metadata
            self.persistence = persistence
            self.type = type
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, max: 64)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, min: 2)
            try self.validate(self.clientRequestToken, name: "clientRequestToken", parent: name, pattern: "[-_a-zA-Z0-9]*")
            try self.validate(self.content, name: "content", parent: name, min: 1)
            try self.validate(self.content, name: "content", parent: name, pattern: "[\\s\\S]*")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, min: 0)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
        }

        private enum CodingKeys: String, CodingKey {
            case clientRequestToken = "ClientRequestToken"
            case content = "Content"
            case metadata = "Metadata"
            case persistence = "Persistence"
            case type = "Type"
        }
    }

    public struct SendChannelMessageResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The ID string assigned to each message.
        public let messageId: String?

        public init(channelArn: String? = nil, messageId: String? = nil) {
            self.channelArn = channelArn
            self.messageId = messageId
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case messageId = "MessageId"
        }
    }

    public struct SigninDelegateGroup: AWSEncodableShape & AWSDecodableShape {
        /// The group name.
        public let groupName: String?

        public init(groupName: String? = nil) {
            self.groupName = groupName
        }

        public func validate(name: String) throws {
            try self.validate(self.groupName, name: "groupName", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case groupName = "GroupName"
        }
    }

    public struct SipMediaApplication: AWSDecodableShape {
        /// The AWS Region in which the SIP media application is created.
        public let awsRegion: String?
        /// The SIP media application creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// List of endpoints for SIP media application. Currently, only one endpoint per SIP media application is permitted.
        public let endpoints: [SipMediaApplicationEndpoint]?
        /// The name of the SIP media application.
        public let name: String?
        /// The SIP media application ID.
        public let sipMediaApplicationId: String?
        /// The SIP media application updated timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(awsRegion: String? = nil, createdTimestamp: Date? = nil, endpoints: [SipMediaApplicationEndpoint]? = nil, name: String? = nil, sipMediaApplicationId: String? = nil, updatedTimestamp: Date? = nil) {
            self.awsRegion = awsRegion
            self.createdTimestamp = createdTimestamp
            self.endpoints = endpoints
            self.name = name
            self.sipMediaApplicationId = sipMediaApplicationId
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case createdTimestamp = "CreatedTimestamp"
            case endpoints = "Endpoints"
            case name = "Name"
            case sipMediaApplicationId = "SipMediaApplicationId"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct SipMediaApplicationCall: AWSDecodableShape {
        /// The transaction ID of a call.
        public let transactionId: String?

        public init(transactionId: String? = nil) {
            self.transactionId = transactionId
        }

        private enum CodingKeys: String, CodingKey {
            case transactionId = "TransactionId"
        }
    }

    public struct SipMediaApplicationEndpoint: AWSEncodableShape & AWSDecodableShape {
        /// Valid Amazon Resource Name (ARN) of the Lambda function. The function must be created in the same AWS Region as the SIP media application.
        public let lambdaArn: String?

        public init(lambdaArn: String? = nil) {
            self.lambdaArn = lambdaArn
        }

        public func validate(name: String) throws {
            try self.validate(self.lambdaArn, name: "lambdaArn", parent: name, max: 10000)
            try self.validate(self.lambdaArn, name: "lambdaArn", parent: name, pattern: "arn:(aws[a-zA-Z-]*)?:lambda:[a-z]{2}((-gov)|(-iso(b?)))?-[a-z]+-\\d{1}:\\d{12}:function:[a-zA-Z0-9-_]+(:(\\$LATEST|[a-zA-Z0-9-_]+))?")
        }

        private enum CodingKeys: String, CodingKey {
            case lambdaArn = "LambdaArn"
        }
    }

    public struct SipMediaApplicationLoggingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// Enables application message logs for the SIP media application.
        public let enableSipMediaApplicationMessageLogs: Bool?

        public init(enableSipMediaApplicationMessageLogs: Bool? = nil) {
            self.enableSipMediaApplicationMessageLogs = enableSipMediaApplicationMessageLogs
        }

        private enum CodingKeys: String, CodingKey {
            case enableSipMediaApplicationMessageLogs = "EnableSipMediaApplicationMessageLogs"
        }
    }

    public struct SipRule: AWSDecodableShape {
        /// The time at which the SIP rule was created, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// Indicates whether the SIP rule is enabled or disabled. You must disable a rule before you can delete it.
        public let disabled: Bool?
        /// The name of the SIP rule.
        public let name: String?
        /// The SIP rule ID.
        public let sipRuleId: String?
        /// Target SIP media application and other details, such as priority and AWS Region, to be specified in the SIP rule. Only one SIP rule per AWS Region can be provided.
        public let targetApplications: [SipRuleTargetApplication]?
        /// The type of trigger assigned to the SIP rule in TriggerValue, currently RequestUriHostname or ToPhoneNumber.
        public let triggerType: SipRuleTriggerType?
        /// If TriggerType is RequestUriHostname, then the value can be the outbound host name of the Amazon Chime Voice Connector. If TriggerType is ToPhoneNumber, then the value can be a customer-owned phone number in E164 format. SipRule is triggered when a SIP rule requests host name or ToPhoneNumber matches in the incoming SIP request.
        public let triggerValue: String?
        /// The time at which the SIP rule was last updated, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?

        public init(createdTimestamp: Date? = nil, disabled: Bool? = nil, name: String? = nil, sipRuleId: String? = nil, targetApplications: [SipRuleTargetApplication]? = nil, triggerType: SipRuleTriggerType? = nil, triggerValue: String? = nil, updatedTimestamp: Date? = nil) {
            self.createdTimestamp = createdTimestamp
            self.disabled = disabled
            self.name = name
            self.sipRuleId = sipRuleId
            self.targetApplications = targetApplications
            self.triggerType = triggerType
            self.triggerValue = triggerValue
            self.updatedTimestamp = updatedTimestamp
        }

        private enum CodingKeys: String, CodingKey {
            case createdTimestamp = "CreatedTimestamp"
            case disabled = "Disabled"
            case name = "Name"
            case sipRuleId = "SipRuleId"
            case targetApplications = "TargetApplications"
            case triggerType = "TriggerType"
            case triggerValue = "TriggerValue"
            case updatedTimestamp = "UpdatedTimestamp"
        }
    }

    public struct SipRuleTargetApplication: AWSEncodableShape & AWSDecodableShape {
        /// The AWS Region of the target application.
        public let awsRegion: String?
        /// Priority of the SIP media application in the target list.
        public let priority: Int?
        /// The SIP media application ID.
        public let sipMediaApplicationId: String?

        public init(awsRegion: String? = nil, priority: Int? = nil, sipMediaApplicationId: String? = nil) {
            self.awsRegion = awsRegion
            self.priority = priority
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.validate(self.priority, name: "priority", parent: name, min: 1)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case priority = "Priority"
            case sipMediaApplicationId = "SipMediaApplicationId"
        }
    }

    public struct StreamingConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// The retention period, in hours, for the Amazon Kinesis data.
        public let dataRetentionInHours: Int
        /// When true, media streaming to Amazon Kinesis is turned off.
        public let disabled: Bool?
        /// The streaming notification targets.
        public let streamingNotificationTargets: [StreamingNotificationTarget]?

        public init(dataRetentionInHours: Int, disabled: Bool? = nil, streamingNotificationTargets: [StreamingNotificationTarget]? = nil) {
            self.dataRetentionInHours = dataRetentionInHours
            self.disabled = disabled
            self.streamingNotificationTargets = streamingNotificationTargets
        }

        public func validate(name: String) throws {
            try self.validate(self.dataRetentionInHours, name: "dataRetentionInHours", parent: name, min: 0)
            try self.validate(self.streamingNotificationTargets, name: "streamingNotificationTargets", parent: name, max: 3)
            try self.validate(self.streamingNotificationTargets, name: "streamingNotificationTargets", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case dataRetentionInHours = "DataRetentionInHours"
            case disabled = "Disabled"
            case streamingNotificationTargets = "StreamingNotificationTargets"
        }
    }

    public struct StreamingNotificationTarget: AWSEncodableShape & AWSDecodableShape {
        /// The streaming notification target.
        public let notificationTarget: NotificationTarget

        public init(notificationTarget: NotificationTarget) {
            self.notificationTarget = notificationTarget
        }

        private enum CodingKeys: String, CodingKey {
            case notificationTarget = "NotificationTarget"
        }
    }

    public struct Tag: AWSEncodableShape & AWSDecodableShape {
        /// The key of the tag.
        public let key: String
        /// The value of the tag.
        public let value: String

        public init(key: String, value: String) {
            self.key = key
            self.value = value
        }

        public func validate(name: String) throws {
            try self.validate(self.key, name: "key", parent: name, max: 128)
            try self.validate(self.key, name: "key", parent: name, min: 1)
            try self.validate(self.value, name: "value", parent: name, max: 256)
            try self.validate(self.value, name: "value", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case key = "Key"
            case value = "Value"
        }
    }

    public struct TagAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri(locationName: "attendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag key-value pairs.
        public let tags: [Tag]

        public init(attendeeId: String, meetingId: String, tags: [Tag]) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.tags.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 10)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct TagMeetingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag key-value pairs.
        public let tags: [Tag]

        public init(meetingId: String, tags: [Tag]) {
            self.meetingId = meetingId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.tags.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case tags = "Tags"
        }
    }

    public struct TagResourceRequest: AWSEncodableShape {
        /// The resource ARN.
        public let resourceARN: String
        /// The tag key-value pairs.
        public let tags: [Tag]

        public init(resourceARN: String, tags: [Tag]) {
            self.resourceARN = resourceARN
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, max: 1024)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, min: 1)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
            try self.tags.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.tags, name: "tags", parent: name, max: 50)
            try self.validate(self.tags, name: "tags", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case resourceARN = "ResourceARN"
            case tags = "Tags"
        }
    }

    public struct TelephonySettings: AWSEncodableShape & AWSDecodableShape {
        /// Allows or denies inbound calling.
        public let inboundCalling: Bool
        /// Allows or denies outbound calling.
        public let outboundCalling: Bool
        /// Allows or denies SMS messaging.
        public let sms: Bool

        public init(inboundCalling: Bool, outboundCalling: Bool, sms: Bool) {
            self.inboundCalling = inboundCalling
            self.outboundCalling = outboundCalling
            self.sms = sms
        }

        private enum CodingKeys: String, CodingKey {
            case inboundCalling = "InboundCalling"
            case outboundCalling = "OutboundCalling"
            case sms = "SMS"
        }
    }

    public struct Termination: AWSEncodableShape & AWSDecodableShape {
        /// The countries to which calls are allowed, in ISO 3166-1 alpha-2 format. Required.
        public let callingRegions: [String]?
        /// The IP addresses allowed to make calls, in CIDR format. Required.
        public let cidrAllowedList: [String]?
        /// The limit on calls per second. Max value based on account service quota. Default value of 1.
        public let cpsLimit: Int?
        /// The default caller ID phone number.
        public let defaultPhoneNumber: String?
        /// When termination settings are disabled, outbound calls can not be made.
        public let disabled: Bool?

        public init(callingRegions: [String]? = nil, cidrAllowedList: [String]? = nil, cpsLimit: Int? = nil, defaultPhoneNumber: String? = nil, disabled: Bool? = nil) {
            self.callingRegions = callingRegions
            self.cidrAllowedList = cidrAllowedList
            self.cpsLimit = cpsLimit
            self.defaultPhoneNumber = defaultPhoneNumber
            self.disabled = disabled
        }

        public func validate(name: String) throws {
            try self.validate(self.cpsLimit, name: "cpsLimit", parent: name, min: 1)
            try self.validate(self.defaultPhoneNumber, name: "defaultPhoneNumber", parent: name, pattern: "^\\+?[1-9]\\d{1,14}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingRegions = "CallingRegions"
            case cidrAllowedList = "CidrAllowedList"
            case cpsLimit = "CpsLimit"
            case defaultPhoneNumber = "DefaultPhoneNumber"
            case disabled = "Disabled"
        }
    }

    public struct TerminationHealth: AWSDecodableShape {
        /// The source IP address.
        public let source: String?
        /// The timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var timestamp: Date?

        public init(source: String? = nil, timestamp: Date? = nil) {
            self.source = source
            self.timestamp = timestamp
        }

        private enum CodingKeys: String, CodingKey {
            case source = "Source"
            case timestamp = "Timestamp"
        }
    }

    public struct UntagAttendeeRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "attendeeId", location: .uri(locationName: "attendeeId")),
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK attendee ID.
        public let attendeeId: String
        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag keys.
        public let tagKeys: [String]

        public init(attendeeId: String, meetingId: String, tagKeys: [String]) {
            self.attendeeId = attendeeId
            self.meetingId = meetingId
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.attendeeId, name: "attendeeId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 10)
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case tagKeys = "TagKeys"
        }
    }

    public struct UntagMeetingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "meetingId", location: .uri(locationName: "meetingId"))
        ]

        /// The Amazon Chime SDK meeting ID.
        public let meetingId: String
        /// The tag keys.
        public let tagKeys: [String]

        public init(meetingId: String, tagKeys: [String]) {
            self.meetingId = meetingId
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.meetingId, name: "meetingId", parent: name, pattern: "[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 50)
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case tagKeys = "TagKeys"
        }
    }

    public struct UntagResourceRequest: AWSEncodableShape {
        /// The resource ARN.
        public let resourceARN: String
        /// The tag keys.
        public let tagKeys: [String]

        public init(resourceARN: String, tagKeys: [String]) {
            self.resourceARN = resourceARN
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, max: 1024)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, min: 1)
            try self.validate(self.resourceARN, name: "resourceARN", parent: name, pattern: "^arn[\\/\\:\\-\\_\\.a-zA-Z0-9]+$")
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, max: 128)
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, max: 50)
            try self.validate(self.tagKeys, name: "tagKeys", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case resourceARN = "ResourceARN"
            case tagKeys = "TagKeys"
        }
    }

    public struct UpdateAccountRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The new name for the specified Amazon Chime account.
        public let name: String?

        public init(accountId: String, name: String? = nil) {
            self.accountId = accountId
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
        }
    }

    public struct UpdateAccountResponse: AWSDecodableShape {
        /// The updated Amazon Chime account details.
        public let account: Account?

        public init(account: Account? = nil) {
            self.account = account
        }

        private enum CodingKeys: String, CodingKey {
            case account = "Account"
        }
    }

    public struct UpdateAccountSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The Amazon Chime account settings to update.
        public let accountSettings: AccountSettings

        public init(accountId: String, accountSettings: AccountSettings) {
            self.accountId = accountId
            self.accountSettings = accountSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case accountSettings = "AccountSettings"
        }
    }

    public struct UpdateAccountSettingsResponse: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateAppInstanceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceArn", location: .uri(locationName: "appInstanceArn"))
        ]

        /// The ARN of the AppInstance.
        public let appInstanceArn: String
        /// The metadata that you want to change.
        public let metadata: String?
        /// The name that you want to change.
        public let name: String

        public init(appInstanceArn: String, metadata: String? = nil, name: String) {
            self.appInstanceArn = appInstanceArn
            self.metadata = metadata
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, max: 1600)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, min: 5)
            try self.validate(self.appInstanceArn, name: "appInstanceArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, min: 0)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*")
        }

        private enum CodingKeys: String, CodingKey {
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct UpdateAppInstanceResponse: AWSDecodableShape {
        /// The ARN of the AppInstance.
        public let appInstanceArn: String?

        public init(appInstanceArn: String? = nil) {
            self.appInstanceArn = appInstanceArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceArn = "AppInstanceArn"
        }
    }

    public struct UpdateAppInstanceUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "appInstanceUserArn", location: .uri(locationName: "appInstanceUserArn"))
        ]

        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String
        /// The metadata of the AppInstanceUser.
        public let metadata: String?
        /// The name of the AppInstanceUser.
        public let name: String

        public init(appInstanceUserArn: String, metadata: String? = nil, name: String) {
            self.appInstanceUserArn = appInstanceUserArn
            self.metadata = metadata
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, max: 1600)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, min: 5)
            try self.validate(self.appInstanceUserArn, name: "appInstanceUserArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, min: 0)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 100)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case metadata = "Metadata"
            case name = "Name"
        }
    }

    public struct UpdateAppInstanceUserResponse: AWSDecodableShape {
        /// The ARN of the AppInstanceUser.
        public let appInstanceUserArn: String?

        public init(appInstanceUserArn: String? = nil) {
            self.appInstanceUserArn = appInstanceUserArn
        }

        private enum CodingKeys: String, CodingKey {
            case appInstanceUserArn = "AppInstanceUserArn"
        }
    }

    public struct UpdateBotRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "botId", location: .uri(locationName: "botId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The bot ID.
        public let botId: String
        /// When true, stops the specified bot from running in your account.
        public let disabled: Bool?

        public init(accountId: String, botId: String, disabled: Bool? = nil) {
            self.accountId = accountId
            self.botId = botId
            self.disabled = disabled
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.botId, name: "botId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
        }
    }

    public struct UpdateBotResponse: AWSDecodableShape {
        /// The updated bot details.
        public let bot: Bot?

        public init(bot: Bot? = nil) {
            self.bot = bot
        }

        private enum CodingKeys: String, CodingKey {
            case bot = "Bot"
        }
    }

    public struct UpdateChannelMessageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer")),
            AWSMemberEncoding(label: "messageId", location: .uri(locationName: "messageId"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The content of the message being updated.
        public let content: String?
        /// The ID string of the message being updated.
        public let messageId: String
        /// The metadata of the message being updated.
        public let metadata: String?

        public init(channelArn: String, chimeBearer: String? = nil, content: String? = nil, messageId: String, metadata: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.content = content
            self.messageId = messageId
            self.metadata = metadata
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.content, name: "content", parent: name, max: 4096)
            try self.validate(self.content, name: "content", parent: name, min: 0)
            try self.validate(self.content, name: "content", parent: name, pattern: "[\\s\\S]*")
            try self.validate(self.messageId, name: "messageId", parent: name, max: 128)
            try self.validate(self.messageId, name: "messageId", parent: name, min: 1)
            try self.validate(self.messageId, name: "messageId", parent: name, pattern: "[-_a-zA-Z0-9]*")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, min: 0)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
        }

        private enum CodingKeys: String, CodingKey {
            case content = "Content"
            case metadata = "Metadata"
        }
    }

    public struct UpdateChannelMessageResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?
        /// The ID string of the message being updated.
        public let messageId: String?

        public init(channelArn: String? = nil, messageId: String? = nil) {
            self.channelArn = channelArn
            self.messageId = messageId
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
            case messageId = "MessageId"
        }
    }

    public struct UpdateChannelReadMarkerRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?

        public init(channelArn: String, chimeBearer: String? = nil) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UpdateChannelReadMarkerResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?

        public init(channelArn: String? = nil) {
            self.channelArn = channelArn
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
        }
    }

    public struct UpdateChannelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "channelArn", location: .uri(locationName: "channelArn")),
            AWSMemberEncoding(label: "chimeBearer", location: .header(locationName: "x-amz-chime-bearer"))
        ]

        /// The ARN of the channel.
        public let channelArn: String
        /// The AppInstanceUserArn of the user that makes the API call.
        public let chimeBearer: String?
        /// The metadata for the update request.
        public let metadata: String?
        /// The mode of the update request.
        public let mode: ChannelMode
        /// The name of the channel.
        public let name: String

        public init(channelArn: String, chimeBearer: String? = nil, metadata: String? = nil, mode: ChannelMode, name: String) {
            self.channelArn = channelArn
            self.chimeBearer = chimeBearer
            self.metadata = metadata
            self.mode = mode
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.channelArn, name: "channelArn", parent: name, max: 1600)
            try self.validate(self.channelArn, name: "channelArn", parent: name, min: 5)
            try self.validate(self.channelArn, name: "channelArn", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, max: 1600)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, min: 5)
            try self.validate(self.chimeBearer, name: "chimeBearer", parent: name, pattern: "arn:[a-z0-9-\\.]{1,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[a-z0-9-\\.]{0,63}:[^/].{0,1023}")
            try self.validate(self.metadata, name: "metadata", parent: name, max: 1024)
            try self.validate(self.metadata, name: "metadata", parent: name, min: 0)
            try self.validate(self.metadata, name: "metadata", parent: name, pattern: ".*")
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "[\\u0009\\u000A\\u000D\\u0020-\\u007E\\u0085\\u00A0-\\uD7FF\\uE000-\\uFFFD\\u10000-\\u10FFFF]*")
        }

        private enum CodingKeys: String, CodingKey {
            case metadata = "Metadata"
            case mode = "Mode"
            case name = "Name"
        }
    }

    public struct UpdateChannelResponse: AWSDecodableShape {
        /// The ARN of the channel.
        public let channelArn: String?

        public init(channelArn: String? = nil) {
            self.channelArn = channelArn
        }

        private enum CodingKeys: String, CodingKey {
            case channelArn = "ChannelArn"
        }
    }

    public struct UpdateGlobalSettingsRequest: AWSEncodableShape {
        /// The Amazon Chime Business Calling settings.
        public let businessCalling: BusinessCallingSettings
        /// The Amazon Chime Voice Connector settings.
        public let voiceConnector: VoiceConnectorSettings

        public init(businessCalling: BusinessCallingSettings, voiceConnector: VoiceConnectorSettings) {
            self.businessCalling = businessCalling
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case businessCalling = "BusinessCalling"
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct UpdatePhoneNumberRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "phoneNumberId", location: .uri(locationName: "phoneNumberId"))
        ]

        /// The outbound calling name associated with the phone number.
        public let callingName: String?
        /// The phone number ID.
        public let phoneNumberId: String
        /// The product type.
        public let productType: PhoneNumberProductType?

        public init(callingName: String? = nil, phoneNumberId: String, productType: PhoneNumberProductType? = nil) {
            self.callingName = callingName
            self.phoneNumberId = phoneNumberId
            self.productType = productType
        }

        public func validate(name: String) throws {
            try self.validate(self.callingName, name: "callingName", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{2,15}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
            case productType = "ProductType"
        }
    }

    public struct UpdatePhoneNumberRequestItem: AWSEncodableShape {
        /// The outbound calling name to update.
        public let callingName: String?
        /// The phone number ID to update.
        public let phoneNumberId: String
        /// The product type to update.
        public let productType: PhoneNumberProductType?

        public init(callingName: String? = nil, phoneNumberId: String, productType: PhoneNumberProductType? = nil) {
            self.callingName = callingName
            self.phoneNumberId = phoneNumberId
            self.productType = productType
        }

        public func validate(name: String) throws {
            try self.validate(self.callingName, name: "callingName", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{2,15}$")
            try self.validate(self.phoneNumberId, name: "phoneNumberId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
            case phoneNumberId = "PhoneNumberId"
            case productType = "ProductType"
        }
    }

    public struct UpdatePhoneNumberResponse: AWSDecodableShape {
        /// The updated phone number details.
        public let phoneNumber: PhoneNumber?

        public init(phoneNumber: PhoneNumber? = nil) {
            self.phoneNumber = phoneNumber
        }

        private enum CodingKeys: String, CodingKey {
            case phoneNumber = "PhoneNumber"
        }
    }

    public struct UpdatePhoneNumberSettingsRequest: AWSEncodableShape {
        /// The default outbound calling name for the account.
        public let callingName: String

        public init(callingName: String) {
            self.callingName = callingName
        }

        public func validate(name: String) throws {
            try self.validate(self.callingName, name: "callingName", parent: name, pattern: "^$|^[a-zA-Z0-9 ]{2,15}$")
        }

        private enum CodingKeys: String, CodingKey {
            case callingName = "CallingName"
        }
    }

    public struct UpdateProxySessionRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "proxySessionId", location: .uri(locationName: "proxySessionId")),
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The proxy session capabilities.
        public let capabilities: [Capability]
        /// The number of minutes allowed for the proxy session.
        public let expiryMinutes: Int?
        /// The proxy session ID.
        public let proxySessionId: String
        /// The Amazon Chime voice connector ID.
        public let voiceConnectorId: String

        public init(capabilities: [Capability], expiryMinutes: Int? = nil, proxySessionId: String, voiceConnectorId: String) {
            self.capabilities = capabilities
            self.expiryMinutes = expiryMinutes
            self.proxySessionId = proxySessionId
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.expiryMinutes, name: "expiryMinutes", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, max: 128)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, min: 1)
            try self.validate(self.proxySessionId, name: "proxySessionId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, max: 128)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case capabilities = "Capabilities"
            case expiryMinutes = "ExpiryMinutes"
        }
    }

    public struct UpdateProxySessionResponse: AWSDecodableShape {
        /// The proxy session details.
        public let proxySession: ProxySession?

        public init(proxySession: ProxySession? = nil) {
            self.proxySession = proxySession
        }

        private enum CodingKeys: String, CodingKey {
            case proxySession = "ProxySession"
        }
    }

    public struct UpdateRoomMembershipRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "memberId", location: .uri(locationName: "memberId")),
            AWSMemberEncoding(label: "roomId", location: .uri(locationName: "roomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The member ID.
        public let memberId: String
        /// The role of the member.
        public let role: RoomMembershipRole?
        /// The room ID.
        public let roomId: String

        public init(accountId: String, memberId: String, role: RoomMembershipRole? = nil, roomId: String) {
            self.accountId = accountId
            self.memberId = memberId
            self.role = role
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.memberId, name: "memberId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case role = "Role"
        }
    }

    public struct UpdateRoomMembershipResponse: AWSDecodableShape {
        /// The room membership details.
        public let roomMembership: RoomMembership?

        public init(roomMembership: RoomMembership? = nil) {
            self.roomMembership = roomMembership
        }

        private enum CodingKeys: String, CodingKey {
            case roomMembership = "RoomMembership"
        }
    }

    public struct UpdateRoomRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "roomId", location: .uri(locationName: "roomId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The room name.
        public let name: String?
        /// The room ID.
        public let roomId: String

        public init(accountId: String, name: String? = nil, roomId: String) {
            self.accountId = accountId
            self.name = name
            self.roomId = roomId
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.roomId, name: "roomId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
        }
    }

    public struct UpdateRoomResponse: AWSDecodableShape {
        /// The room details.
        public let room: Room?

        public init(room: Room? = nil) {
            self.room = room
        }

        private enum CodingKeys: String, CodingKey {
            case room = "Room"
        }
    }

    public struct UpdateSipMediaApplicationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipMediaApplicationId", location: .uri(locationName: "sipMediaApplicationId"))
        ]

        /// The new set of endpoints for the specified SIP media application.
        public let endpoints: [SipMediaApplicationEndpoint]?
        /// The new name for the specified SIP media application.
        public let name: String?
        /// The SIP media application ID.
        public let sipMediaApplicationId: String

        public init(endpoints: [SipMediaApplicationEndpoint]? = nil, name: String? = nil, sipMediaApplicationId: String) {
            self.endpoints = endpoints
            self.name = name
            self.sipMediaApplicationId = sipMediaApplicationId
        }

        public func validate(name: String) throws {
            try self.endpoints?.forEach {
                try $0.validate(name: "\(name).endpoints[]")
            }
            try self.validate(self.endpoints, name: "endpoints", parent: name, max: 1)
            try self.validate(self.endpoints, name: "endpoints", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.sipMediaApplicationId, name: "sipMediaApplicationId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case endpoints = "Endpoints"
            case name = "Name"
        }
    }

    public struct UpdateSipMediaApplicationResponse: AWSDecodableShape {
        /// The updated SIP media application details.
        public let sipMediaApplication: SipMediaApplication?

        public init(sipMediaApplication: SipMediaApplication? = nil) {
            self.sipMediaApplication = sipMediaApplication
        }

        private enum CodingKeys: String, CodingKey {
            case sipMediaApplication = "SipMediaApplication"
        }
    }

    public struct UpdateSipRuleRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "sipRuleId", location: .uri(locationName: "sipRuleId"))
        ]

        /// The new value specified to indicate whether the rule is disabled.
        public let disabled: Bool?
        /// The new name for the specified SIP rule.
        public let name: String
        /// The SIP rule ID.
        public let sipRuleId: String
        /// The new value of the list of target applications.
        public let targetApplications: [SipRuleTargetApplication]?

        public init(disabled: Bool? = nil, name: String, sipRuleId: String, targetApplications: [SipRuleTargetApplication]? = nil) {
            self.disabled = disabled
            self.name = name
            self.sipRuleId = sipRuleId
            self.targetApplications = targetApplications
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.sipRuleId, name: "sipRuleId", parent: name, pattern: ".*\\S.*")
            try self.targetApplications?.forEach {
                try $0.validate(name: "\(name).targetApplications[]")
            }
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, max: 25)
            try self.validate(self.targetApplications, name: "targetApplications", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case disabled = "Disabled"
            case name = "Name"
            case targetApplications = "TargetApplications"
        }
    }

    public struct UpdateSipRuleResponse: AWSDecodableShape {
        /// Updated SIP rule details.
        public let sipRule: SipRule?

        public init(sipRule: SipRule? = nil) {
            self.sipRule = sipRule
        }

        private enum CodingKeys: String, CodingKey {
            case sipRule = "SipRule"
        }
    }

    public struct UpdateUserRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "userId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The Alexa for Business metadata.
        public let alexaForBusinessMetadata: AlexaForBusinessMetadata?
        /// The user license type to update. This must be a supported license type for the Amazon Chime account that the user belongs to.
        public let licenseType: License?
        /// The user ID.
        public let userId: String
        /// The user type.
        public let userType: UserType?

        public init(accountId: String, alexaForBusinessMetadata: AlexaForBusinessMetadata? = nil, licenseType: License? = nil, userId: String, userType: UserType? = nil) {
            self.accountId = accountId
            self.alexaForBusinessMetadata = alexaForBusinessMetadata
            self.licenseType = licenseType
            self.userId = userId
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.accountId, name: "accountId", parent: name, pattern: ".*\\S.*")
            try self.validate(self.userId, name: "userId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case alexaForBusinessMetadata = "AlexaForBusinessMetadata"
            case licenseType = "LicenseType"
            case userType = "UserType"
        }
    }

    public struct UpdateUserRequestItem: AWSEncodableShape {
        /// The Alexa for Business metadata.
        public let alexaForBusinessMetadata: AlexaForBusinessMetadata?
        /// The user license type.
        public let licenseType: License?
        /// The user ID.
        public let userId: String
        /// The user type.
        public let userType: UserType?

        public init(alexaForBusinessMetadata: AlexaForBusinessMetadata? = nil, licenseType: License? = nil, userId: String, userType: UserType? = nil) {
            self.alexaForBusinessMetadata = alexaForBusinessMetadata
            self.licenseType = licenseType
            self.userId = userId
            self.userType = userType
        }

        public func validate(name: String) throws {
            try self.validate(self.userId, name: "userId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case alexaForBusinessMetadata = "AlexaForBusinessMetadata"
            case licenseType = "LicenseType"
            case userId = "UserId"
            case userType = "UserType"
        }
    }

    public struct UpdateUserResponse: AWSDecodableShape {
        /// The updated user details.
        public let user: User?

        public init(user: User? = nil) {
            self.user = user
        }

        private enum CodingKeys: String, CodingKey {
            case user = "User"
        }
    }

    public struct UpdateUserSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "accountId", location: .uri(locationName: "accountId")),
            AWSMemberEncoding(label: "userId", location: .uri(locationName: "userId"))
        ]

        /// The Amazon Chime account ID.
        public let accountId: String
        /// The user ID.
        public let userId: String
        /// The user settings to update.
        public let userSettings: UserSettings

        public init(accountId: String, userId: String, userSettings: UserSettings) {
            self.accountId = accountId
            self.userId = userId
            self.userSettings = userSettings
        }

        private enum CodingKeys: String, CodingKey {
            case userSettings = "UserSettings"
        }
    }

    public struct UpdateVoiceConnectorGroupRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorGroupId", location: .uri(locationName: "voiceConnectorGroupId"))
        ]

        /// The name of the Amazon Chime Voice Connector group.
        public let name: String
        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String
        ///  The VoiceConnectorItems to associate with the group.
        public let voiceConnectorItems: [VoiceConnectorItem]

        public init(name: String, voiceConnectorGroupId: String, voiceConnectorItems: [VoiceConnectorItem]) {
            self.name = name
            self.voiceConnectorGroupId = voiceConnectorGroupId
            self.voiceConnectorItems = voiceConnectorItems
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.voiceConnectorGroupId, name: "voiceConnectorGroupId", parent: name, pattern: ".*\\S.*")
            try self.voiceConnectorItems.forEach {
                try $0.validate(name: "\(name).voiceConnectorItems[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case voiceConnectorItems = "VoiceConnectorItems"
        }
    }

    public struct UpdateVoiceConnectorGroupResponse: AWSDecodableShape {
        /// The updated Amazon Chime Voice Connector group details.
        public let voiceConnectorGroup: VoiceConnectorGroup?

        public init(voiceConnectorGroup: VoiceConnectorGroup? = nil) {
            self.voiceConnectorGroup = voiceConnectorGroup
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnectorGroup = "VoiceConnectorGroup"
        }
    }

    public struct UpdateVoiceConnectorRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "voiceConnectorId", location: .uri(locationName: "voiceConnectorId"))
        ]

        /// The name of the Amazon Chime Voice Connector.
        public let name: String
        /// When enabled, requires encryption for the Amazon Chime Voice Connector.
        public let requireEncryption: Bool
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(name: String, requireEncryption: Bool, voiceConnectorId: String) {
            self.name = name
            self.requireEncryption = requireEncryption
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 256)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case requireEncryption = "RequireEncryption"
        }
    }

    public struct UpdateVoiceConnectorResponse: AWSDecodableShape {
        /// The updated Amazon Chime Voice Connector details.
        public let voiceConnector: VoiceConnector?

        public init(voiceConnector: VoiceConnector? = nil) {
            self.voiceConnector = voiceConnector
        }

        private enum CodingKeys: String, CodingKey {
            case voiceConnector = "VoiceConnector"
        }
    }

    public struct User: AWSDecodableShape {
        /// The Amazon Chime account ID.
        public let accountId: String?
        /// The Alexa for Business metadata.
        public let alexaForBusinessMetadata: AlexaForBusinessMetadata?
        /// The display name of the user.
        public let displayName: String?
        /// Date and time when the user is invited to the Amazon Chime account, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var invitedOn: Date?
        /// The license type for the user.
        public let licenseType: License?
        /// The user's personal meeting PIN.
        public let personalPIN: String?
        /// The primary email address of the user.
        public let primaryEmail: String?
        /// The primary phone number associated with the user.
        public let primaryProvisionedNumber: String?
        /// Date and time when the user is registered, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var registeredOn: Date?
        /// The user ID.
        public let userId: String
        /// The user invite status.
        public let userInvitationStatus: InviteStatus?
        /// The user registration status.
        public let userRegistrationStatus: RegistrationStatus?
        /// The user type.
        public let userType: UserType?

        public init(accountId: String? = nil, alexaForBusinessMetadata: AlexaForBusinessMetadata? = nil, displayName: String? = nil, invitedOn: Date? = nil, licenseType: License? = nil, personalPIN: String? = nil, primaryEmail: String? = nil, primaryProvisionedNumber: String? = nil, registeredOn: Date? = nil, userId: String, userInvitationStatus: InviteStatus? = nil, userRegistrationStatus: RegistrationStatus? = nil, userType: UserType? = nil) {
            self.accountId = accountId
            self.alexaForBusinessMetadata = alexaForBusinessMetadata
            self.displayName = displayName
            self.invitedOn = invitedOn
            self.licenseType = licenseType
            self.personalPIN = personalPIN
            self.primaryEmail = primaryEmail
            self.primaryProvisionedNumber = primaryProvisionedNumber
            self.registeredOn = registeredOn
            self.userId = userId
            self.userInvitationStatus = userInvitationStatus
            self.userRegistrationStatus = userRegistrationStatus
            self.userType = userType
        }

        private enum CodingKeys: String, CodingKey {
            case accountId = "AccountId"
            case alexaForBusinessMetadata = "AlexaForBusinessMetadata"
            case displayName = "DisplayName"
            case invitedOn = "InvitedOn"
            case licenseType = "LicenseType"
            case personalPIN = "PersonalPIN"
            case primaryEmail = "PrimaryEmail"
            case primaryProvisionedNumber = "PrimaryProvisionedNumber"
            case registeredOn = "RegisteredOn"
            case userId = "UserId"
            case userInvitationStatus = "UserInvitationStatus"
            case userRegistrationStatus = "UserRegistrationStatus"
            case userType = "UserType"
        }
    }

    public struct UserError: AWSDecodableShape {
        /// The error code.
        public let errorCode: ErrorCode?
        /// The error message.
        public let errorMessage: String?
        /// The user ID for which the action failed.
        public let userId: String?

        public init(errorCode: ErrorCode? = nil, errorMessage: String? = nil, userId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.userId = userId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case userId = "UserId"
        }
    }

    public struct UserSettings: AWSEncodableShape & AWSDecodableShape {
        /// The telephony settings associated with the user.
        public let telephony: TelephonySettings

        public init(telephony: TelephonySettings) {
            self.telephony = telephony
        }

        private enum CodingKeys: String, CodingKey {
            case telephony = "Telephony"
        }
    }

    public struct VoiceConnector: AWSDecodableShape {
        ///  The AWS Region in which the Amazon Chime Voice Connector is created. Default: us-east-1.
        public let awsRegion: VoiceConnectorAwsRegion?
        /// The Amazon Chime Voice Connector creation timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The name of the Amazon Chime Voice Connector.
        public let name: String?
        /// The outbound host name for the Amazon Chime Voice Connector.
        public let outboundHostName: String?
        /// Designates whether encryption is required for the Amazon Chime Voice Connector.
        public let requireEncryption: Bool?
        /// The updated Amazon Chime Voice Connector timestamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String?

        public init(awsRegion: VoiceConnectorAwsRegion? = nil, createdTimestamp: Date? = nil, name: String? = nil, outboundHostName: String? = nil, requireEncryption: Bool? = nil, updatedTimestamp: Date? = nil, voiceConnectorId: String? = nil) {
            self.awsRegion = awsRegion
            self.createdTimestamp = createdTimestamp
            self.name = name
            self.outboundHostName = outboundHostName
            self.requireEncryption = requireEncryption
            self.updatedTimestamp = updatedTimestamp
            self.voiceConnectorId = voiceConnectorId
        }

        private enum CodingKeys: String, CodingKey {
            case awsRegion = "AwsRegion"
            case createdTimestamp = "CreatedTimestamp"
            case name = "Name"
            case outboundHostName = "OutboundHostName"
            case requireEncryption = "RequireEncryption"
            case updatedTimestamp = "UpdatedTimestamp"
            case voiceConnectorId = "VoiceConnectorId"
        }
    }

    public struct VoiceConnectorGroup: AWSDecodableShape {
        /// The Amazon Chime Voice Connector group creation time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdTimestamp: Date?
        /// The name of the Amazon Chime Voice Connector group.
        public let name: String?
        /// The updated Amazon Chime Voice Connector group time stamp, in ISO 8601 format.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var updatedTimestamp: Date?
        /// The Amazon Chime Voice Connector group ID.
        public let voiceConnectorGroupId: String?
        /// The Amazon Chime Voice Connectors to which to route inbound calls.
        public let voiceConnectorItems: [VoiceConnectorItem]?

        public init(createdTimestamp: Date? = nil, name: String? = nil, updatedTimestamp: Date? = nil, voiceConnectorGroupId: String? = nil, voiceConnectorItems: [VoiceConnectorItem]? = nil) {
            self.createdTimestamp = createdTimestamp
            self.name = name
            self.updatedTimestamp = updatedTimestamp
            self.voiceConnectorGroupId = voiceConnectorGroupId
            self.voiceConnectorItems = voiceConnectorItems
        }

        private enum CodingKeys: String, CodingKey {
            case createdTimestamp = "CreatedTimestamp"
            case name = "Name"
            case updatedTimestamp = "UpdatedTimestamp"
            case voiceConnectorGroupId = "VoiceConnectorGroupId"
            case voiceConnectorItems = "VoiceConnectorItems"
        }
    }

    public struct VoiceConnectorItem: AWSEncodableShape & AWSDecodableShape {
        /// The priority associated with the Amazon Chime Voice Connector, with 1 being the highest priority. Higher priority Amazon Chime Voice Connectors are attempted first.
        public let priority: Int
        /// The Amazon Chime Voice Connector ID.
        public let voiceConnectorId: String

        public init(priority: Int, voiceConnectorId: String) {
            self.priority = priority
            self.voiceConnectorId = voiceConnectorId
        }

        public func validate(name: String) throws {
            try self.validate(self.priority, name: "priority", parent: name, max: 99)
            try self.validate(self.priority, name: "priority", parent: name, min: 1)
            try self.validate(self.voiceConnectorId, name: "voiceConnectorId", parent: name, pattern: ".*\\S.*")
        }

        private enum CodingKeys: String, CodingKey {
            case priority = "Priority"
            case voiceConnectorId = "VoiceConnectorId"
        }
    }

    public struct VoiceConnectorSettings: AWSEncodableShape & AWSDecodableShape {
        /// The Amazon S3 bucket designated for call detail record storage.
        public let cdrBucket: String?

        public init(cdrBucket: String? = nil) {
            self.cdrBucket = cdrBucket
        }

        private enum CodingKeys: String, CodingKey {
            case cdrBucket = "CdrBucket"
        }
    }
}
